From d0d152272e6e908d1f7f8b672326159aa968c375 Mon Sep 17 00:00:00 2001 From: UniDarkstars <1830018670@qq.com> Date: Tue, 26 Nov 2024 15:16:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?AES=E5=8F=AA=E7=95=99=E4=B8=8BCBC=E5=92=8CE?= =?UTF-8?q?CB=E6=A8=A1=E5=BC=8F=EF=BC=8C=E5=88=A0=E9=99=A4=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.py | 2 -- recv/recv.py | 4 ++-- sender/sender.py | 12 ++++++------ tool/symmetric/AES.py | 12 ++---------- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/config/config.py b/config/config.py index 6804a94..1a10ccf 100644 --- a/config/config.py +++ b/config/config.py @@ -6,8 +6,6 @@ pubKeySavePath = "./public.pem" class EncryptType(Enum): AES_ECB = auto() AES_CBC = auto() - AES_CFB = auto() - AES_OFB = auto() SM4_ECB = auto() SM4_CBC = auto() diff --git a/recv/recv.py b/recv/recv.py index ee4a775..5fb093d 100644 --- a/recv/recv.py +++ b/recv/recv.py @@ -40,9 +40,9 @@ def handleLetter(letter: Letter): elif type == config.EncryptType.SM4_CBC: data = base64.b64decode(SM4.decrypt_cbc_with_iv(letter.fileBase64, key)) 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: - data = base64.b64decode(AES.AESUtils(key).decrypt(key, letter.fileBase64,"cbc")) + data = base64.b64decode(AES.AESUtils().decrypt(key, letter.fileBase64,"cbc")) else: raise KeyError("不支持的对称加密算法") diff --git a/sender/sender.py b/sender/sender.py index 4f02093..0f7dffe 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -6,12 +6,12 @@ import os from entity.Letter import Letter -from itsdangerous import base64_encode + 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, encrypt_cbc_with_iv +from tool.symmetric.SM4 import encrypt_ecb, encrypt_cbc_with_iv from Crypto.Random import get_random_bytes @@ -43,7 +43,7 @@ def main(): letter.fileName = getFileName(path) letter.recvPubKey = getRecvPubKey() 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.encryptType = getEncryptType() @@ -107,13 +107,13 @@ def selectSymEncryptionChoice(): # 选择加密算法的模式 while True: if encryWay == "aes": - encryMode = input("选择加密算法模式 (ecb/cbc/cfb/ofb): ").strip().lower() - if encryMode in ["ecb", "cbc", "cfb", "ofb"]: + encryMode = input("选择加密算法模式 (ecb/cbc): ").strip().lower() + if encryMode in ["ecb", "cbc"]: letterMode = encryMode print(f"已选择 '{encryMode}' 加密模式.") break # 输入有效后退出循环 else: - print("非法输入,请输入 ecb/cbc/cfb/ofb") + print("非法输入,请输入 ecb/cbc") elif encryWay == "sm4": encryMode = input("选择加密模式 (ecb/cbc): ").strip().lower() diff --git a/tool/symmetric/AES.py b/tool/symmetric/AES.py index 7197e2e..47eb5ad 100644 --- a/tool/symmetric/AES.py +++ b/tool/symmetric/AES.py @@ -24,27 +24,19 @@ class AESUtils: def _get_encipher(self, mode: str) -> AES: """根据模式返回相应的加密 AES cipher""" - iv = None + iv = b'abcdefghijklmnop' if mode == 'CBC': iv = get_random_bytes(AES.block_size) 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 return AES.new(self.key, AES.MODE_ECB) def _get_decipher(self, dekey, mode: str) -> AES: """根据模式返回相应的解密 AES cipher""" - iv = None + iv = b'abcdefghijklmnop' if mode == 'CBC': iv = get_random_bytes(AES.block_size) 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 return AES.new(dekey, AES.MODE_ECB) From 2ebfc948dde43a0bef04457cbb42e4bd72c2874c Mon Sep 17 00:00:00 2001 From: UniDarkstars <1830018670@qq.com> Date: Tue, 26 Nov 2024 15:51:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=8E=B7=E5=BE=97=E6=8E=A5=E6=94=B6?= =?UTF-8?q?=E6=96=B9=E5=85=AC=E9=92=A5getRecvPubKey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sender/sender.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sender/sender.py b/sender/sender.py index 0f7dffe..c98da91 100644 --- a/sender/sender.py +++ b/sender/sender.py @@ -176,7 +176,11 @@ def getEncryptKey(): # 获得接收方的公钥 def getRecvPubKey(): # 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 # 获得发送方的公钥