diff --git a/sender/sender.py b/sender/sender.py index 9915251..bfcf195 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -1,15 +1,37 @@ # 模式,文件,自己的公钥从哪里来,别人的公钥从哪里来 +from encodings.base64_codec import base64_encode from entity.Letter import Letter +from tool import PriKeyHelper +from tool.PriKeyHelper import getUserKey +from tool.asymmetric import RSA from tool.symmetric.AES import AESUtils from tool.symmetric.SM4 import encrypt_ecb, decrypt_cbc_with_iv from Crypto.Random import get_random_bytes + # 两个变量,记录信封 letterWay = "" letterMode = "" +letterSymKey = "" def main(): # 用户输入各种数据填充letter字段 + data = "Hello, AES!" + + data, akey = SymEncryption(data) + + Letter.sign = getSign() + Letter.encryptType = getEncryptType() + Letter.encryptKey = getEncryptKey() + Letter.recvPubKey = getRecvPubKey() + Letter.senderPubKey = getSenderPubKey() + + print(Letter.sign) + print(Letter.encryptType) + print(Letter.encryptKey) + print(Letter.recvPubKey) + print(Letter.senderPubKey) + # 获取用户的公私钥对进行签名 # 使用对方的公钥进行加密 # 发送信件 @@ -61,36 +83,72 @@ def selectSymEncryptionChoice(): # 使用对称加密,返回加密后的数据和随机生成的密钥 def SymEncryption(encryData, key: bytes = None): + + global letterSymKey # 获得加密的方法和加密的模式 way, mode = selectSymEncryptionChoice() if way == "aes": aesUtils = AESUtils(key) encryptedData, trueKey = aesUtils.encrypt(encryData, mode=mode) # 这里encryData要改为文件内容 + letterSymKey = trueKey + return encryptedData,trueKey if way == "sm4": key = get_random_bytes(16) if mode == "ecb": - encrypted_data = encrypt_ecb(data, key) + encrypted_data = encrypt_ecb(encryData, key) # mode 为 cbc else: - encrypted_data = decrypt_cbc_with_iv(data, key) + encrypted_data = decrypt_cbc_with_iv(encryData, key) + + letterSymKey = key return encrypted_data, key +# 获得签名 +def getSign(): -def getKey(): - pass + #计算文件bytes + document_bytes = "" + priKey, pubKey = PriKeyHelper.getUserKey() + signDocuHash = RSA.sign_message(document_bytes, priKey) + + return signDocuHash + +def getEncryptType(): + encryType = f"{letterWay}_{letterMode}".upper() + + return encryType + +# 对称密钥,返回的是使用接收方公钥加密后的密钥 +def getEncryptKey(): + rsaEncrySymKey = RSA.encrypt_message(letterSymKey, getRecvPubKey()) + + return rsaEncrySymKey + +# 获得接收方的公钥 +def getRecvPubKey(): + # recPubKey = input("plz input Receiver's Public Key: ") + recPubKey = getUserKey()[1] + return recPubKey + +# 获得发送方的公钥 +def getSenderPubKey(): + privateKey, publicKey = getUserKey() + return publicKey if __name__ == "__main__": # 示例数据和密钥 - data = "Hello, AES!" - - data, akey = SymEncryption(data) + # data = "Hello, AES!" + # + # data, akey = SymEncryption(data) - print(data,akey) + # print(data,akey) + # + # encryptType = f"{letterWay}_{letterMode}".upper() + # print(encryptType) - encryptType = f"{letterWay}_{letterMode}".upper() - print(encryptType) \ No newline at end of file + main() \ No newline at end of file diff --git a/tool/asymmetric/RSA.py b/tool/asymmetric/RSA.py index 652e4f5..542418d 100644 --- a/tool/asymmetric/RSA.py +++ b/tool/asymmetric/RSA.py @@ -27,7 +27,7 @@ def encrypt_message(message, public_key_base64): public_key = RSA.import_key(public_key_bin) # 使用公钥加密消息 cipher_rsa = PKCS1_OAEP.new(public_key) - encrypted_message = cipher_rsa.encrypt(message.encode('utf-8')) + encrypted_message = cipher_rsa.encrypt(message) return binascii.hexlify(encrypted_message).decode('utf-8')