sender修改了逻辑,RSA修改了encrypt_message中cipher_rsa.encrypt(message),原本message.encode('utf-8')

sender_okToCheck
UniDarkstars 8 months ago
parent b3a21d30cd
commit 49fb76fe56

@ -1,15 +1,37 @@
# 模式,文件,自己的公钥从哪里来,别人的公钥从哪里来 # 模式,文件,自己的公钥从哪里来,别人的公钥从哪里来
from encodings.base64_codec import base64_encode
from entity.Letter import Letter 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.AES import AESUtils
from tool.symmetric.SM4 import encrypt_ecb, decrypt_cbc_with_iv from tool.symmetric.SM4 import encrypt_ecb, decrypt_cbc_with_iv
from Crypto.Random import get_random_bytes from Crypto.Random import get_random_bytes
# 两个变量,记录信封 # 两个变量,记录信封
letterWay = "" letterWay = ""
letterMode = "" letterMode = ""
letterSymKey = ""
def main(): def main():
# 用户输入各种数据填充letter字段 # 用户输入各种数据填充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): def SymEncryption(encryData, key: bytes = None):
global letterSymKey
# 获得加密的方法和加密的模式 # 获得加密的方法和加密的模式
way, mode = selectSymEncryptionChoice() way, mode = selectSymEncryptionChoice()
if way == "aes": if way == "aes":
aesUtils = AESUtils(key) aesUtils = AESUtils(key)
encryptedData, trueKey = aesUtils.encrypt(encryData, mode=mode) # 这里encryData要改为文件内容 encryptedData, trueKey = aesUtils.encrypt(encryData, mode=mode) # 这里encryData要改为文件内容
letterSymKey = trueKey
return encryptedData,trueKey return encryptedData,trueKey
if way == "sm4": if way == "sm4":
key = get_random_bytes(16) key = get_random_bytes(16)
if mode == "ecb": if mode == "ecb":
encrypted_data = encrypt_ecb(data, key) encrypted_data = encrypt_ecb(encryData, key)
# mode 为 cbc # mode 为 cbc
else: else:
encrypted_data = decrypt_cbc_with_iv(data, key) encrypted_data = decrypt_cbc_with_iv(encryData, key)
letterSymKey = key
return encrypted_data, key return encrypted_data, key
# 获得签名
def getSign():
def getKey(): #计算文件bytes
pass 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__": if __name__ == "__main__":
# 示例数据和密钥 # 示例数据和密钥
data = "Hello, AES!" # data = "Hello, AES!"
#
data, akey = SymEncryption(data) # data, akey = SymEncryption(data)
print(data,akey) # print(data,akey)
#
# encryptType = f"{letterWay}_{letterMode}".upper()
# print(encryptType)
encryptType = f"{letterWay}_{letterMode}".upper() main()
print(encryptType)

@ -27,7 +27,7 @@ def encrypt_message(message, public_key_base64):
public_key = RSA.import_key(public_key_bin) public_key = RSA.import_key(public_key_bin)
# 使用公钥加密消息 # 使用公钥加密消息
cipher_rsa = PKCS1_OAEP.new(public_key) 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') return binascii.hexlify(encrypted_message).decode('utf-8')

Loading…
Cancel
Save