python 实现AES加密算法


由于最近项目需要对一些比较敏感信息,比如账号信息,不能明文提供用户,需要加密处理,然后使用的时候再由封装好的程序去解密。

 

1. AES算法简介

    AES算法详解:高级加密标准,它是一种对称加密算法,AES只有一个密钥,这个密钥既用来加密,也用于解密。

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB。
从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现。
CBC 和ECB模式的区别就是:

  • CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
  • ECB加密不需要iv,只需要key(密钥)

 

2.模块安装

在 Windows下使用AES时要安装的是pycryptodome 模块

pip install pycryptodome 

在 Linux下使用AES时要安装的是pycrypto模块

pip install pycrypto 

 

3.AES的ECB 模式实现

import base64
from Crypto.Cipher import AES

class EncryptDate(object):
    def __init__(self):
        self.key = "abcx2211230CoJUm".encode("utf-8")                          # 初始化密钥
        self.iv = "9999999999999999".encode("utf-8")                            # 初始化偏移量
        self.length = 16                                        # 初始化数据块大小
        self.aes = AES.new(self.key, AES.MODE_CBC, self.iv)     # 初始化AES,ECB模式的实例
        # 截断函数,去除填充的字符
        self.unpad = lambda s: s[0:-s[-1]]

    def pad(self, text):
        """
        填充函数,使被加密数据的字节码长度是block_size的整数倍
        """
        count = len(text.encode('utf-8'))
        add = self.length - (count % self.length)
        entext = text + (chr(add) * add)
        return entext

    def encrypt(self, encrData):  # 加密函数
        a = self.pad(encrData)
        res = self.aes.encrypt(a.encode("utf-8"))
        msg = str(base64.b64encode(res), encoding="utf8")
        return msg

    def decrypt(self, decrData):  # 解密函数
        res = base64.decodebytes(decrData.encode("utf-8"))
        msg_text = self.aes.decrypt(res)
        decrypt_text = self.unpad(msg_text).decode('utf8')
        return decrypt_text


if __name__ == '__main__':
    pwd = '&HKJASBkjs#&1'
    pwd1 = EncryptDate().encrypt(pwd)
    pwd2 = EncryptDate().decrypt(pwd1)
    print('原始密码:',pwd)
    print('加密密码:',pwd1)
    print('解密密码:',pwd2)

 

版权声明:本文为CSDN博主「埃菲尔没有塔尖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38819889/article/details/123642201




评论

支持上传图片(拖动图片或者截图粘贴)

0 评论