我正在開發一個允許人們交換加密消息的項目。無法將字節字符串轉換回字符串
我相信問題是當我傳輸加密的消息。我傳遞一個字符串(消息)給此函數
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!
>>>
首先,在Python 2.x中,'str'和'bytes'是相同的類型,所以在兩者之間來回轉換對你沒有任何好處。 – abarnert 2014-11-22 00:54:12
同時,它看起來像是在嘗試發送某些二進制數據的字符串表示形式的字符串表示形式。爲什麼?而且,如果這就是你所擁有的,那麼它肯定是ASCII碼,那麼你爲什麼要擔心UTF-8的編碼和解碼? – abarnert 2014-11-22 00:56:08
無論如何,你的問題很可能是由於你得到了二進制密文的字符串表示形式的字符串表示,而不是二進制密文,當然你不能解密。 – abarnert 2014-11-22 00:57:52