我正在开发一个允许人们交换加密邮件的项目。
我认为问题与我传输加密邮件时有关。我将一个字符串(消息)传递给这个函数
def sendInfo(host, port, sendObject):
socit = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("#Connecting")
socit.connect((host, port))
print("#Sending")
#sendObject = unicode(sendObject, 'utf-8')
#bites = str.encode(sendObject)
bites = bytes(sendObject)
print str(bites)
#bites = pickle.dumps(sendObject)
socit.send(bites)
socit.close()
print("Sent successfully")
我发出的传送信息的一个例子是:
"'\x02\xc6\x07\xa5\xb1\xc4t\xd4\x8e\xf1e\xc3r\x17\xc6T\xec\x9bm\xbe\xf8\xb4J3\x9d\xeej\xf2N\xec\x8a\xc1\xbf\xdc\xe8\x8f\xc3\x1d\n\xea\x9b\x02\x99i\\o\xb3\xed\x7f-\x0b4]f}\x8f\x1e\xdcJ\xefo\xabR\x1a\x14N/O"\xa5\xa8X\xa5\xd9\xf2\xfb\xab7\xf7\xd67\xd4Y\xa1\x85\x9a\xfc\xfe\x8d\x03\',\x89k|NY"\xbc\x7f\xe0\x0b\xc56\xd6G\xc3Y\xac\x98\x88\x1fn\x8bz\xcaMi\xfd\xe4Lj\xa3\xbc'"
然后我转换成这个我希望是可以接受的utf-8:
"(x02\xc6\x07\xa5\xb1\xc4t\xd4\x8e\xf1e\xc3r\x17\xc6T\xec\x9bm\xbe\xf8\xb4J3\x9d\xeej\xf2N\xec\x8a\xc1\xbf\xdc\xe8\x8f\xc3\x1d\n\xea\x9b\x02\x99i\\o\xb3\xed\x7f-\x0b4]f}\x8f\x1e\xdcJ\xefo\xabR\x1a\x14N/O"\xa5\xa8X\xa5\xd9\xf2\xfb\xab7\xf7\xd67\xd4Y\xa1\x85\x9a\xfc\xfe\x8d\x03\',\x89k|NY"\xbc\x7f\xe0\x0b\xc56\xd6G\xc3Y\xac\x98\x88\x1fn\x8bz\xcaMi\xfd\xe4Lj\xa3\xbc"
我用来解密的代码基于pyrsa库(http://stuvel.eu/rsa):
def decrypt(message, privKey):
return rsa.decrypt(message, privacy)
我得出的错误是:
Traceback (most recent call last):
File "/Users/Andrew/Shatter/ShatterListen.py", line 142, in <module>
main()
File "/Users/Andrew/Shatter/ShatterListen.py", line 127, in main
ciphertext = ShatterRSA.decrypt(ciphertext, listenerKey[1])
File "/Users/Andrew/Shatter/ShatterRSA.py", line 85, in decrypt
return rsa.decrypt(message, privKey)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rsa/pkcs1.py", line 232, in decrypt
raise DecryptionError('Decryption failed')
DecryptionError: Decryption failed
如果有人能够对情况有所了解并就可能出现的问题提出一些建议。我90%确定传输的字符串没有被正确解码,这就是错误的来源,但我不知道我能尝试什么。如果您想要更多代码或信息,我很乐意提供它。
编辑:
以下是一些代码,显示单个模块中的加密过程,而不是传输:
key = create_key(1024)
ciphertext = encrypt('Hey there!', key[0])
print ciphertext
print decrypt(ciphertext, key[1])
其输出为:
>>>
Hey there!
>>>
答案 0 :(得分:1)
字节字符串"(x02\xc6\x07\xa5\xb1\xc4t ..."
不是有效的UTF-8流。在以\xc6
开头的110
之后,下一个字节必须以10
没有的位\x07
开头。有关编码工作原理的详细摘要,请参见the Wikipedia article。
你说你把收到的密文“转换”成了这个字符串;我假设这是通过RSA解密步骤?如果是这样,那么有几件事要检查: