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