Merge branch 'sender_okToCheck' into test_merge

# Conflicts:
#	sender/sender.py
sender_okToCheck
Timmoc 3 months ago
commit 753e20382a

@ -10,8 +10,6 @@ pubKeySavePath = f"{configPath}/public.pem"
class EncryptType(Enum): class EncryptType(Enum):
AES_ECB = auto() AES_ECB = auto()
AES_CBC = auto() AES_CBC = auto()
AES_CFB = auto()
AES_OFB = auto()
SM4_ECB = auto() SM4_ECB = auto()
SM4_CBC = auto() SM4_CBC = auto()

@ -42,9 +42,9 @@ def handleLetter(letter: Letter):
elif type == config.EncryptType.SM4_CBC: elif type == config.EncryptType.SM4_CBC:
data = base64.b64decode(SM4.decrypt_cbc_with_iv(letter.fileBase64, key)) data = base64.b64decode(SM4.decrypt_cbc_with_iv(letter.fileBase64, key))
elif type == config.EncryptType.AES_ECB: elif type == config.EncryptType.AES_ECB:
data = base64.b64decode(AES.AESUtils(key).decrypt(key, letter.fileBase64, "ecb")) data = base64.b64decode(AES.AESUtils().decrypt(key, letter.fileBase64, "ecb"))
elif type == config.EncryptType.AES_CBC: elif type == config.EncryptType.AES_CBC:
data = base64.b64decode(AES.AESUtils(key).decrypt(key, letter.fileBase64,"cbc")) data = base64.b64decode(AES.AESUtils().decrypt(key, letter.fileBase64,"cbc"))
else: else:
raise KeyError("不支持的对称加密算法") raise KeyError("不支持的对称加密算法")

@ -6,11 +6,12 @@ import os
from entity.Letter import Letter from entity.Letter import Letter
from itsdangerous import base64_encode
from tool import PriKeyHelper from tool import PriKeyHelper
from tool.PriKeyHelper import getUserKey from tool.PriKeyHelper import getUserKey
from tool.asymmetric import RSA from tool.asymmetric import RSA
from tool.symmetric.AES import AESUtils from tool.symmetric.AES import AESUtils
from tool.symmetric.SM4 import encrypt_ecb, encrypt_cbc_with_iv from tool.symmetric.SM4 import encrypt_ecb, decrypt_cbc_with_iv, encrypt_cbc_with_iv
from Crypto.Random import get_random_bytes from Crypto.Random import get_random_bytes
@ -106,13 +107,13 @@ def selectSymEncryptionChoice():
# 选择加密算法的模式 # 选择加密算法的模式
while True: while True:
if encryWay == "aes": if encryWay == "aes":
encryMode = input("选择加密算法模式 (ecb/cbc/cfb/ofb): ").strip().lower() encryMode = input("选择加密算法模式 (ecb/cbc): ").strip().lower()
if encryMode in ["ecb", "cbc", "cfb", "ofb"]: if encryMode in ["ecb", "cbc"]:
letterMode = encryMode letterMode = encryMode
print(f"已选择 '{encryMode}' 加密模式.") print(f"已选择 '{encryMode}' 加密模式.")
break # 输入有效后退出循环 break # 输入有效后退出循环
else: else:
print("非法输入,请输入 ecb/cbc/cfb/ofb") print("非法输入,请输入 ecb/cbc")
elif encryWay == "sm4": elif encryWay == "sm4":
encryMode = input("选择加密模式 (ecb/cbc): ").strip().lower() encryMode = input("选择加密模式 (ecb/cbc): ").strip().lower()
@ -175,7 +176,11 @@ def getEncryptKey():
# 获得接收方的公钥 # 获得接收方的公钥
def getRecvPubKey(): def getRecvPubKey():
# recPubKey = input("plz input Receiver's Public Key: ") # recPubKey = input("plz input Receiver's Public Key: ")
recPubKey = getUserKey()[1] # 在某某地方获得对方的公钥然后保存到某个地方输入路径uoqu
recPubKeyPath = input("请输入接受方的公钥文件路径:")
with open(recPubKeyPath, "rb") as f:
data = f.read()
recPubKey = base64.b64encode(data).decode('utf-8')
return recPubKey return recPubKey
# 获得发送方的公钥 # 获得发送方的公钥

@ -24,27 +24,19 @@ class AESUtils:
def _get_encipher(self, mode: str) -> AES: def _get_encipher(self, mode: str) -> AES:
"""根据模式返回相应的加密 AES cipher""" """根据模式返回相应的加密 AES cipher"""
iv = None iv = b'abcdefghijklmnop'
if mode == 'CBC': if mode == 'CBC':
iv = get_random_bytes(AES.block_size) iv = get_random_bytes(AES.block_size)
return AES.new(self.key, AES.MODE_CBC, iv) return AES.new(self.key, AES.MODE_CBC, iv)
elif mode == 'CFB':
return AES.new(self.key, AES.MODE_CFB)
elif mode == 'OFB':
return AES.new(self.key, AES.MODE_OFB)
else: # 默认是 ECB else: # 默认是 ECB
return AES.new(self.key, AES.MODE_ECB) return AES.new(self.key, AES.MODE_ECB)
def _get_decipher(self, dekey, mode: str) -> AES: def _get_decipher(self, dekey, mode: str) -> AES:
"""根据模式返回相应的解密 AES cipher""" """根据模式返回相应的解密 AES cipher"""
iv = None iv = b'abcdefghijklmnop'
if mode == 'CBC': if mode == 'CBC':
iv = get_random_bytes(AES.block_size) iv = get_random_bytes(AES.block_size)
return AES.new(dekey, AES.MODE_CBC, iv) return AES.new(dekey, AES.MODE_CBC, iv)
elif mode == 'CFB':
return AES.new(dekey, AES.MODE_CFB)
elif mode == 'OFB':
return AES.new(dekey, AES.MODE_OFB)
else: # 默认是 ECB else: # 默认是 ECB
return AES.new(dekey, AES.MODE_ECB) return AES.new(dekey, AES.MODE_ECB)

Loading…
Cancel
Save