您当前的位置:首页 > 计算机 > 编程开发 > Python

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

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

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)

结果为:

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

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