AES只留下CBC和ECB模式,删除了一些冗余代码

sender_okToCheck
UniDarkstars 8 months ago
parent 8ee4a2e136
commit d0d152272e

@ -6,8 +6,6 @@ pubKeySavePath = "./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()

@ -40,9 +40,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,12 +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, decrypt_cbc_with_iv, encrypt_cbc_with_iv from tool.symmetric.SM4 import encrypt_ecb, encrypt_cbc_with_iv
from Crypto.Random import get_random_bytes from Crypto.Random import get_random_bytes
@ -43,7 +43,7 @@ def main():
letter.fileName = getFileName(path) letter.fileName = getFileName(path)
letter.recvPubKey = getRecvPubKey() letter.recvPubKey = getRecvPubKey()
letter.senderPubKey = getSenderPubKey() letter.senderPubKey = getSenderPubKey()
letter.fileBase64, akey = SymEncryption(base64_encode(data).decode("utf-8"),letterSymKey) letter.fileBase64, akey = SymEncryption(base64.b64encode(data).decode("utf-8"),letterSymKey)
letter.encryptKey = getEncryptKey() letter.encryptKey = getEncryptKey()
letter.encryptType = getEncryptType() letter.encryptType = getEncryptType()
@ -107,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()

@ -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