修正sender_net无法发送文件问题

修正测试用例
完成sender.py的发送者和接收方显示
main
Timmoc 3 months ago
parent 0667abe75f
commit ac69ed5917

@ -4,28 +4,28 @@ import recv
from senders import sender
@patch('builtins.input', side_effect=['../README.md', 'aes', 'ecb'])
@patch('builtins.input', side_effect=['../README.md',r'D:\Users\Timmoc\AppData\Roaming\fst\public.pem','aes', 'ecb'])
def test_handleLetter_aes_ecb(mock_input):
letter = sender.main()
recv.handleLetter(letter)
pass
@patch('builtins.input', side_effect=['../README.md', 'aes', 'cbc'])
@patch('builtins.input', side_effect=['../README.md',r'D:\Users\Timmoc\AppData\Roaming\fst\public.pem', 'aes', 'cbc'])
def test_handleLetter_aes_cbc(mock_input):
letter = sender.main()
recv.handleLetter(letter)
pass
@patch('builtins.input', side_effect=['../README.md', 'sm4', 'ecb'])
@patch('builtins.input', side_effect=['../README.md',r'D:\Users\Timmoc\AppData\Roaming\fst\public.pem', 'sm4', 'ecb'])
def test_handleLetter_sm4_ecb(mock_input):
letter = sender.main()
recv.handleLetter(letter)
pass
@patch('builtins.input', side_effect=['../README.md', 'sm4', 'cbc'])
@patch('builtins.input', side_effect=['../README.md',r'D:\Users\Timmoc\AppData\Roaming\fst\public.pem', 'sm4', 'cbc'])
def test_handleLetter_sm4_cbc(mock_input):
letter = sender.main()
recv.handleLetter(letter)

@ -1,26 +1,25 @@
# 模式,文件,自己的公钥从哪里来,别人的公钥从哪里来
import pyfiglet
import base64
import os
import pyfiglet
from Crypto.Random import get_random_bytes
from entity.Letter import Letter
from tool import PriKeyHelper
from tool.PriKeyHelper import getUserKey
from tool.asymmetric import RSA
from tool.hash import Segwit
from tool.symmetric.AES import AESUtils
from tool.symmetric.SM4 import encrypt_ecb, encrypt_cbc_with_iv
from Crypto.Random import get_random_bytes
# 三个全局变量,记录信封
letterWay = ""
letterMode = ""
letterSymKey = b""
def main():
def main():
# greet
print("")
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
@ -35,14 +34,13 @@ def main():
# 用户输入各种数据填充letter字段
path = selectFile()
with open(path,"rb") as f:
with open(path, "rb") as f:
data = f.read()
letter.fileName = getFileName(path)
letter.recvPubKey = getRecvPubKey()
letter.senderPubKey = getSenderPubKey()
letter.fileBase64, akey = SymEncryption(base64.b64encode(data).decode("utf-8"),letterSymKey)
letter.fileBase64, akey = SymEncryption(base64.b64encode(data).decode("utf-8"), letterSymKey)
letter.encryptKey = getEncryptKey(letter.recvPubKey)
letter.encryptType = getEncryptType()
@ -56,12 +54,19 @@ def main():
print(letter.recvPubKey)
print(letter.senderPubKey)
# by Timmoc
print(
f"已以 {Segwit.encodeSegwit(letter.senderPubKey.encode('utf-8'))} 的身份向"
f" {Segwit.encodeSegwit(letter.recvPubKey.encode('utf-8'))} 生成加密信件")
# by Timmoc
# 获取用户的公私钥对进行签名
# 使用对方的公钥进行加密
# 发送信件
return letter # 方便recv测试以后可以删除。
return letter # 方便recv测试以后可以删除。
pass
def selectFile() -> str:
# s = "public.pem"
while True:
@ -69,7 +74,7 @@ def selectFile() -> str:
s = input("输入文件路径:")
with open(s, "rb") as _:
pass
return s
return s
except FileNotFoundError:
print("错误: 文件未找到,请输入正确的文件路径。")
except PermissionError:
@ -77,11 +82,13 @@ def selectFile() -> str:
except Exception as e:
print(f"发生未知错误: {e}")
# 获得文件名
def getFileName(fName:str) -> str:
def getFileName(fName: str) -> str:
filePath = os.path.split(fName)
return filePath[-1]
def sendLetter(letter: Letter, target="192.168.195.162:8426"):
# 向目标ip和端口发送指定的信件
pass
@ -129,7 +136,6 @@ def selectSymEncryptionChoice():
# 使用对称加密,返回加密后的数据和随机生成的密钥
def SymEncryption(encryData, key: bytes = None):
global letterSymKey
# 获得加密的方法和加密的模式
way, mode = selectSymEncryptionChoice()
@ -139,7 +145,7 @@ def SymEncryption(encryData, key: bytes = None):
encryptedData, trueKey = aesUtils.encrypt(encryData, mode=mode) # 这里encryData要改为文件内容
letterSymKey = trueKey
return encryptedData,trueKey
return encryptedData, trueKey
if way == "sm4":
key = get_random_bytes(16)
@ -151,27 +157,30 @@ def SymEncryption(encryData, key: bytes = None):
letterSymKey = key
return encrypted_data, key
# 获得签名
def getSign(document_bytes):
#计算文件bytes
# 计算文件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(getRecvPubKey):
rsaEncrySymKey = RSA.encrypt_message(letterSymKey, getRecvPubKey)
return base64.b64encode(rsaEncrySymKey).decode("utf-8")
# 获得接收方的公钥
def getRecvPubKey():
# recPubKey = input(" plz input Receiver's Public Key: ")
@ -182,6 +191,7 @@ def getRecvPubKey():
recPubKey = base64.b64encode(data).decode('utf-8')
return recPubKey
# 获得发送方的公钥
def getSenderPubKey():
privateKey, publicKey = getUserKey()
@ -198,4 +208,4 @@ if __name__ == "__main__":
#
# encryptType = f"{letterWay}_{letterMode}".upper()
# print(encryptType)
main()
main()

Loading…
Cancel
Save