import base64 import hashlib import rsa from Crypto.Cipher import AES, DES3 from Crypto.Hash import SHA256 from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 from pyDes import ECB, PAD_PKCS5, des def createcip(path, op): # 传输的文件 filename = path # 加密对称密钥 with open("../server/Bpubkey.pem", mode="rb") as f: pub = f.read() pubkey = rsa.PublicKey.load_pkcs1(pub) message = "12345678" if op == "DES" else "1234567812345678" info = rsa.encrypt(message.encode("utf-8"), pubkey) with open("encryptedkeyfile.bin", "wb") as key_file: # 生成加密文本encryptedkeyfile key_file.write(info) # 加密文件 DES算法加密 with open(filename, "r", encoding="utf-8") as f: plaintext = f.read() x = plaintext while len(x) % 16 != 0: # 如果text不足16位的倍数就用空格补足为16位 x += "\0" x = x if op == "DES": SECRET_KEY = message print(len(message)) iv = SECRET_KEY des_obj = des(SECRET_KEY, ECB, iv, padmode=PAD_PKCS5) secret = des_obj.encrypt(x) elif op == "AES_ECB": SECRET_KEY = message.encode() aes_obj = AES.new(SECRET_KEY, AES.MODE_ECB) secret = aes_obj.encrypt(x.encode()) elif op == "AES_CBC": iv = message.encode() SECRET_KEY = message.encode() aes = AES.new(SECRET_KEY, AES.MODE_CBC) secret = aes.encrypt(x.encode()) with open("encryptedfile.txt", "wb") as cip: # encryptedfile cip.write(secret) # 计算摘要值以及签名 out1 = hashlib.sha256(plaintext.encode('"utf-8"')).hexdigest() out1 = out1.encode("utf-8") privkey_key_file = open("./Aprivkey.pem", "rb").read().decode("utf-8") # 导入公钥,返回一个RSA秘钥对象 private_key = RSA.importKey(privkey_key_file) h = SHA256.new(out1) signer = PKCS1_v1_5.new(private_key) signature = signer.sign(h) # 对需要加密的消息进行PKCS#1 v1.5加密,再使用Base64对类似字节的对象进行编码。 sig = base64.b64encode(signature) with open("sigfile.bin", "wb") as f: # 生成签名文件sigfile f.write(sig)