python3与python2.7导入的模块不同,
两者模块导入及下载:pip install Cryptodome
为避免其他影响删除Crypto,PyCrypto,库 用uninstall。
Crypto,PyCrypto 两者好像不再维护升级了
# -*- coding: utf-8 -*-
try:
###python3 导入方式
from Cryptodome.Cipher import AES
from Cryptodome import Random
except ImportError:
###python2 导入方式
from Crypto.Cipher import AES
from Crypto import Random
from binascii import a2b_hex,b2a_hex
import binascii
from optparse import OptionParser
import json,os,time
def encrypted_text(key,data):
try:
# iv = Random.new().read(AES.block_size) ##生成长度等于AES块大小的不可重复的密钥向量
iv = b"lskdmfncjfkgmvnb" ### iv 必须为16位,自定义
mycipher = AES.new(key, AES.MODE_CFB, iv) # 使用key和iv初始化AES对象, 使用MODE_CFB模式
ciphertext = iv + mycipher.encrypt(data.encode()) # 将iv(密钥向量)加到加密的密文开头,一起传输
encrypted_data = b2a_hex(ciphertext)[16:]
return ciphertext
except Exception as e:
print(e)
def decrypted_text(key,ciphertext):
try:
# iv = Random.new().read(AES.block_size) ##生成长度等于AES块大小的不可重复的密钥向量
iv = b"lskdmfncjfkgmvnb" ### iv 必须为16位,自定义
mydecrypt = AES.new(key, AES.MODE_CFB, iv)
decrypttext = mydecrypt.decrypt(ciphertext[16:]) #使用新生成的AES对象,将加密的密文解密
text = decrypttext.decode()
return json.loads(text)
except Exception as e:
print(e)
def main():
key = "hello world" #密码为16的倍数,不够补齐
if len(key) <= 32:
key = key.ljust(32)
else:
print("请检查密匙")
key = key.encode("utf8")
data = "Please enter encrypted data"
encrypted_text(key, data) ##加密
decrypted_text(key, data)##解密
if __name__ == "__main__":
main()
python AES 加解密
最新推荐文章于 2022-05-11 18:09:34 发布