300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 对称加密AES代码实现 实现文件加密与解密

对称加密AES代码实现 实现文件加密与解密

时间:2024-03-19 01:54:22

相关推荐

对称加密AES代码实现 实现文件加密与解密

1、建立两个文件jiami.py jiemi.py

2、代码实现(能运行,但有瑕疵,还没完全改好)

加密

from Cryptodome.Cipher import AESimport operator # 导入 operator,用于比较原始数据与加解密后的数据import timefrom argparse import ArgumentParserAES_BLOCK_SIZE = AES.block_size# AES 加密数据块大小, 只能是16AES_KEY_SIZE = 16 # AES 密钥长度(单位字节),可选 16、24、32,对应 128、192、256 位密钥key = "ok let's go" # AES 加解密密钥# 待加密文本补齐到 block size 的整数倍def PadTest(bytes):while len(bytes) % AES_BLOCK_SIZE != 0:# 循环直到补齐 AES_BLOCK_SIZE 的倍数bytes += ' '.encode() # 通过补空格(不影响源文件的可读)来补齐return bytes # 返回补齐后的字节列表# 待加密的密钥补齐到对应的位数def PadKey(key):if len(key) > AES_KEY_SIZE: # 如果密钥长度超过 AES_KEY_SIZEreturn key[:AES_KEY_SIZE]# 截取前面部分作为密钥并返回while len(key) % AES_KEY_SIZE != 0: # 不到 AES_KEY_SIZE 长度则补齐key += ' '.encode() # 补齐的字符可用任意字符代替return key # 返回补齐后的密钥# AES 加密def EnCrypt(key, bytes):myCipher = AES.new(key, AES.MODE_ECB) # 新建一个 AES 算法实例,使用 ECB(电子密码本)模式encryptData = myCipher.encrypt(bytes) # 调用加密方法,得到加密后的数据return encryptData# 返回加密数据# 主函数,从这里开始执行if __name__ == '__main__':parser = ArgumentParser(description="这是RSA加密程序.")parser.add_argument("-p", "--plain", type=str, default=r"./test1.txt", help="明文路径")parser.add_argument("-c", "--cipher", type=str, default=r"./cipher1.txt", help="密文输出路径")parser.add_argument("--public", type=str, default=r"./public1.pem", help="加密密钥路径")parser.add_argument("--cerlen", type=int, default=1024, help="证书key位数")args = parser.parse_args()with open(args.plain, 'rb') as f:# 以二进制模式打开文件bytes = f.read() # 将文件内容读取出来到字节列表中print('源文件长度:{}'.format(len(bytes)))key = PadKey(key.encode())# 将密钥转换位字节列表并补齐密钥with open(args.public, "wb") as f:f.write(key)bytes = PadTest(bytes)# 补齐原始数据print('补齐后的源文件长度:{}'.format(len(bytes)))encryptTest = EnCrypt(key, bytes) # 利用密钥对原始数据进行加密with open(args.cipher, "wb") as f:f.write(encryptTest) # 加密好的密文文件

解密

from Cryptodome.Cipher import AESimport operator # 导入 operator,用于比较原始数据与加解密后的数据import timefrom argparse import ArgumentParser# 主函数,从这里开始执行if __name__ == '__main__':parser = ArgumentParser(description="这是RSA解密程序.")parser.add_argument("-c", "--cipher", type=str, default=r"./cipher1.txt", help="密文路径")parser.add_argument("-p", "--plain", type=str, default=r"./testjiemi1.txt", help="明文输出路径")parser.add_argument("--private", type=str, default=r"./public1.pem", help="解密密钥路径")parser.add_argument("--cerlen", type=int, default=1024, help="证书key位数")args = parser.parse_args()with open(args.cipher, 'rb') as f:# 以二进制模式打开文件bytes = f.read() # 将文件内容读取出来到字节列表中print('源文件长度:{}'.format(len(bytes)))with open(args.private, "rb") as f:key = f.read()myCipher = AES.new(key, AES.MODE_ECB)bytes1 = myCipher.decrypt(bytes) # 利用密钥对加密的数据进行解密with open("testjiemi1.txt", "wb") as f:f.write(bytes1) # 解密好的密文文件

参考链接:

/qq_29225913/article/details/108439185?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_v2~rank_aggregation-2-108439185.pc_agg_rank_aggregation&utm_term=aes%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86python&spm=1000.2123.3001.4430

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。