我无法对通过消息包从套接字连接获得的一些数据进行解码,并因此对其进行解密。我从 UTF-8 中的 Ruby on Rails Web 应用程序中获取字符串,并使用 messagepack 将其全部捆绑并使用套接字将其发送到 python 服务。其他数据很好:字符串、数字、数组等。但是我的加密密码被破坏了。
https://github.com/msgpack/msgpack/issues/15这个讨论建议强制使用 ascii,我在 rails 代码和 python 中都这样做了。如果我在 ruby 中强制使用 ascii 而在 python 中什么也不做,我会在字符串中得到垃圾,但最后我有正确的未加密密码。如果我尝试在我的 python 脚本中强制使用 ascii,我会收到解码错误
while 1:
buf = clientsocket.recv(1024)
unpacker.feed(buf)
for obj in unpacker:
print obj #works great! => ['3', [['really long url', [87987234, 'gobbledyguck of password']]]]
#key.decrypt(obj[1][0][1][1]) roughly gives "YD3zt�(-�½ï¿½ï¿½=you suck"
print key.decrypt(obj[1][0][1][1].decode('ascii'))
加密是使用公钥/私钥完成的(Python 中的 Crypto.PublicKey RSA,ruby 中的 openssl)。我可以在每个脚本中很好地解密和加密(而不是通过消息包通过套接字发送)
有什么想法吗?
编辑:
经过一些实验和思考后,我意识到密码出来就好了这一事实很有趣。问题是字符串开头的多余垃圾。我只是不知道它来自哪里......或者截断它是否安全。