def fileDecrypt(data): (message, encrykey) = pickle.loads(data) onceKey = RSAalgorithm.RsaDecrypt(encrykey, SERVERPRIVATEs) print("接收到的密钥", onceKey, type(onceKey)) message = AESalgorithm.AesDecrypt(message, onceKey.decode('unicode_escape')) message = pickle.loads(message) content = base64.b64decode(message['Message']) print('传送的内容是', content) digest = message['digest'] if RSAalgorithm.VerRsaSignal(content, digest, CLIENTPUBLICs): return content
def fileEncrypt(data): onceKey = AESalgorithm.genKey() print("发送的密钥", onceKey) digest = RSAalgorithm.RsaSignal(data, CLIENTPRIVATE) message = { 'Message': base64.b64encode(data), 'digest': digest.decode("utf-8") } # 把消息和摘要打包 message = pickle.dumps(message) # 转成json字符串 message = AESalgorithm.AesEncrypt(message, onceKey) encrykey = RSAalgorithm.RsaEncrypt(onceKey, SERVERPUBLIC) MES = pickle.dumps([message, encrykey.decode('utf-8')]) return MES
def RecvMessage(Sock, test): while True: Message = Sock.recv(BUFF) (recvdata, PrivateKey) = pickle.loads(Message) decryptdata = RSAalgorithm.RsaDecrypt(recvdata, PrivateKey) if len(Message) > 0: print("receive message:" + decryptdata)
def SendMessage(Sock, test): while True: SendData = input() (encryptdata, PrivateKey) = RSAalgorithm.RsaEncrypt(SendData) print('encrypted data is ' + str(encryptdata)) Message = pickle.dumps([encryptdata, PrivateKey]) if len(SendData) > 0: Sock.send(Message)
def RecvMsg(Sock, test): global CLIENTPUBLICs while True: Message = Sock.recv(BUFF) # 收到文件 (message, encrykey) = pickle.loads(Message) mykey = RSAalgorithm.RsaDecrypt(encrykey, SERVERPRIVATEs) # 用私钥解密获得一次密钥 decryMes = AESalgorithm.AesDecrypt( message, mykey.decode('utf-8')) # 用一次密钥解密消息,获得包含消息内容和摘要的json decryMes = json.loads(decryMes) # 将json转换为python字典 content = decryMes['Message'] digest = decryMes['digest'].encode('utf-8') if RSAalgorithm.VerRsaSignal(content, digest, CLIENTPUBLICs): strMsg = "对方:" + time.strftime( "%Y-%m-%d %H:%M:%S", time.localtime( )) + "通过数字签名认证,本次密钥为" + mykey.decode('utf-8') + '\n' txtMsgList.insert(END, strMsg, 'greencolor') txtMsgList.insert(END, content + '\n')
def sendMsg(Sock): # 发送消息 strMsg = "我:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n' txtMsgList.insert(END, strMsg, 'greencolor') Mes = txtMsg.get('0.0', END) txtMsgList.insert(END, Mes) onceKey = AESalgorithm.genKey() # 一次一密 密钥 digest = RSAalgorithm.RsaSignal(Mes, CLIENTPRIVATE) # 先hash再签名# 生成消息摘要 message = { 'Message': Mes, 'digest': digest.decode("utf-8") } # 把消息和摘要打包 message = json.dumps(message) # 转成json字符串 message = AESalgorithm.AesEncrypt(message, onceKey) # 合并加密 encrykey = RSAalgorithm.RsaEncrypt(onceKey, SERVERPUBLIC) # 用服务器公钥加密一次密钥 txtMsg.delete('0.0', END) Message = pickle.dumps([message, encrykey.decode('utf-8')]) # 序列化消息,用于传输 Sock.send(Message)