You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
FileSecureTransfer/sender/sender.py

96 lines
2.9 KiB

# 模式,文件,自己的公钥从哪里来,别人的公钥从哪里来
from entity.Letter import Letter
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 = ""
def main():
# 用户输入各种数据填充letter字段
# 获取用户的公私钥对进行签名
# 使用对方的公钥进行加密
# 发送信件
pass
def sendLetter(letter: Letter, target="192.168.195.162:8426"):
# 向目标ip和端口发送指定的信件
pass
# 选择对称加密的方法和模式(aes/sm4)
def selectSymEncryptionChoice():
global letterWay, letterMode
encryWay = ""
encryMode = ""
# 选择加密算法
while True:
encryWay = input("Choose the way for encryption (aes/sm4): ").strip().lower() # 统一转成小写
if encryWay in ["aes", "sm4"]:
letterWay = encryWay
print(f"You have selected '{encryWay}' encryption.")
break # 输入有效后退出循环
else:
print("Invalid choice. Please enter 'aes' or 'sm4'.")
# 选择加密算法的模式
while True:
if encryWay == "aes":
encryMode = input("Choose the encryption mode (ecb/cbc/cfb/ofb): ").strip().lower()
if encryMode in ["ecb", "cbc", "cfb", "ofb"]:
letterMode = encryMode
print(f"You have selected '{encryMode}' encryption mode.")
break # 输入有效后退出循环
else:
print("Invalid choice. Please enter ecb/cbc/cfb/ofb")
elif encryWay == "sm4":
encryMode = input("Choose the encryption mode (ecb/cbc): ").strip().lower()
if encryMode in ["ecb", "cbc"]:
print(f"You have selected '{encryMode}' encryption mode.")
break # 输入有效后退出循环
else:
print("Invalid choice. Please enter ecb/cbc")
return encryWay, encryMode
# 使用对称加密,返回加密后的数据和随机生成的密钥
def SymEncryption(encryData, key: bytes = None):
# 获得加密的方法和加密的模式
way, mode = selectSymEncryptionChoice()
if way == "aes":
aesUtils = AESUtils(key)
encryptedData, trueKey = aesUtils.encrypt(encryData, mode=mode) # 这里encryData要改为文件内容
return encryptedData,trueKey
if way == "sm4":
key = get_random_bytes(16)
if mode == "ecb":
encrypted_data = encrypt_ecb(data, key)
# mode 为 cbc
else:
encrypted_data = decrypt_cbc_with_iv(data, key)
return encrypted_data, key
def getKey():
pass
if __name__ == "__main__":
# 示例数据和密钥
data = "Hello, AES!"
data, akey = SymEncryption(data)
print(data,akey)
encryptType = f"{letterWay}_{letterMode}".upper()
print(encryptType)