2025年3月14日 星期五 甲辰(龙)年 月十三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python3.6执行AES加密及解密方法

时间:12-11来源:作者:点击数:19

python版本:3.6.5 

首先安装pycryptodome

  • # pip install pycryptodome

加密方式特别简单,代码如下:

方式一:补0

  • #!/usr/bin/python
  • # -*- coding: utf-8 -*-
  • """
  • 补0方式(ECB加密)
  • """
  • import base64
  • from Crypto.Cipher import AES
  • # 补足字符串长度为16的倍数
  • def add_to_16(s):
  • while len(s) % 16 != 0:
  • s += '\0'
  • return str.encode(s) # 返回bytes
  • key = '1234567890123456' # 密钥长度必须为16、24或32位,分别对应AES-128、AES-192和AES-256
  • text = 'abcdefg' # 待加密文本
  • aes = AES.new(str.encode(key), AES.MODE_ECB) # 初始化加密器,本例采用ECB加密模式
  • encrypted_text = str(base64.encodebytes(aes.encrypt(add_to_16(text))), encoding='utf8').replace('\n', '') # 加密
  • decrypted_text = str(aes.decrypt(base64.decodebytes(bytes(encrypted_text, encoding='utf8'))).rstrip(b'\0').decode("utf8")) # 解密
  • print('加密值:', encrypted_text)
  • print('解密值:', decrypted_text)

结果为:

方式二:pkcs5

  • #!/usr/bin/python
  • # -*- coding: utf-8 -*-
  • """
  • pkcs5补码方式(ECB加密)
  • """
  • import base64
  • from Crypto.Cipher import AES
  • # 补足字符串长度为16的倍数
  • def add_to_16(s):
  • while len(s) % 16 != 0:
  • s += (16 - len(s) % 16) * chr(16 - len(s) % 16)
  • return str.encode(s) # 返回bytes
  • key = '1234567890123456' # 密钥长度必须为16、24或32位,分别对应AES-128、AES-192和AES-256
  • text = 'abcdefg' # 待加密文本
  • aes = AES.new(str.encode(key), AES.MODE_ECB) # 初始化加密器,本例采用ECB加密模式
  • encrypted_text = str(base64.encodebytes(aes.encrypt(add_to_16(text))), encoding='utf8').replace('\n', '') # 加密
  • decrypted_text = aes.decrypt(base64.decodebytes(bytes(encrypted_text, encoding='utf8'))).decode("utf8") # 解密
  • decrypted_text = decrypted_text[:-ord(decrypted_text[-1])] # 去除多余补位
  • print('pkcs5加密值:', encrypted_text)
  • print('pkcs5解密值:', decrypted_text)

结果为:

两种方式加密后的值是不一样的,解密方式也是不一样的。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐