无法从messagepack(Ruby openssl)解码python中的加密字符串

无法从messagepack(Ruby openssl)解码python中的加密字符串,python,ruby,msgpack,messagepack,Python,Ruby,Msgpack,Messagepack,我很难通过messagepack对从套接字连接获取的一些数据进行解密,从而无法对其进行解密。我从UTF-8中的RubyonRails web应用程序中获取字符串,并使用messagepack将其打包,然后使用套接字将其发送到python服务。其他数据处理得很好:字符串、数字、数组等,但我的加密密码被破坏了 这次讨论建议强制使用ascii,我在rails代码中以及在python中都使用了ascii。如果我在ruby中强制使用ascii,而不在inpython中执行任何操作,则字符串中会出现垃圾邮件

我很难通过messagepack对从套接字连接获取的一些数据进行解密,从而无法对其进行解密。我从UTF-8中的RubyonRails web应用程序中获取字符串,并使用messagepack将其打包,然后使用套接字将其发送到python服务。其他数据处理得很好:字符串、数字、数组等,但我的加密密码被破坏了

这次讨论建议强制使用ascii,我在rails代码中以及在python中都使用了ascii。如果我在ruby中强制使用ascii,而不在inpython中执行任何操作,则字符串中会出现垃圾邮件,但最后我有正确的未加密密码。如果我试图在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完成的。我可以在每个脚本中解密和加密,而不用通过messagepack通过套接字发送

有什么想法吗

编辑:
经过一些实验和思考后,我意识到密码显示得很好这一事实很有趣。问题是字符串开头的多余垃圾。我只是不知道它从哪里来。。。或者截断它是否安全。

我最近遇到了一些问题,很明显是网络把我的密码字符弄乱了。在通过网络发送密码之前,我试着用base64对密码进行编码,就像变魔术一样,它工作得非常完美

使用:

-通过网络发送密码-

cipher = Base64.decode64(cipher)

我最近遇到了一些问题,显然是网络把我的密码字符弄乱了。在通过网络发送密码之前,我试着用base64对密码进行编码,就像变魔术一样,它工作得非常完美

使用:

-通过网络发送密码-

cipher = Base64.decode64(cipher)

最终的解决方案是,输出具有正确的未加密数据,并带有绒毛。通过几次快速的谷歌搜索,我了解到ruby的openssl RSA公钥实现默认启用了PKCS1填充。。。很难很快找到一个好的python模块,因此在这里找到了快速而肮脏的解决方案

这很有魅力

作为一种替代方案,可能更清洁的解决方案看起来不错

在ruby apidock中寻找不使用填充的方法是不直观的


希望这对其他人有所帮助

解决方案的最终结果是,输出具有正确的未加密数据。通过几次快速的谷歌搜索,我了解到ruby的openssl RSA公钥实现默认启用了PKCS1填充。。。很难很快找到一个好的python模块,因此在这里找到了快速而肮脏的解决方案

这很有魅力

作为一种替代方案,可能更清洁的解决方案看起来不错

在ruby apidock中寻找不使用填充的方法是不直观的


希望这对其他人有所帮助

您没有混淆o和obj吗?请尝试先解密messagepack,然后使用decode'utf-8'@MartijnPieters对其进行解码-抱歉,为了清楚起见,请编辑obj@user1585811-您能澄清一下吗?key.decryptobj[1][0][1][1]。解码“ascii”->您首先对数据进行解码,然后对其进行解密。应该在哪里解密Data=key.DecryptedObj[1][0][1][1],然后解密Data.decrypteddata.Decoded'ascii',或尝试解密Data.decrypteddata.Decoded'utf-8'您是否混淆了o和obj?请尝试先解密messagepack,然后使用decode'utf-8'@MartijnPieters对其进行解码-抱歉,为清晰起见,请编辑,只是obj@user1585811-您能澄清一下吗?key.decryptobj[1][0][1][1]。解码“ascii”->您首先对数据进行解码,然后对其进行解密。这里应该是decrypteddata=key.decryptedobj[1][0][1][1],然后解密data.decrypteddata'ascii',或者尝试decrypteddata.decrypteddata'utf-8',有趣的是,您的解决方案产生了我在根本不解码的情况下得到的结果,只是在ruby端强制使用ascii。我在前面有很多额外的内容,但是在字符串的末尾有正确的密码。因为我得到了正确的密码,我在考虑做错误的事情,只是截断不正确的内容。我只是不知道额外的数据是从哪里来的……有趣的是,你的解决方案产生了我所拥有的结果,当时我根本没有解码,只是在ruby端强制使用ascii。我在前面有很多额外的内容,但是在字符串的末尾有正确的密码。因为我得到了正确的密码,我在考虑做错误的事情,只是截断不正确的内容。我只是不知道额外的数据是从哪里来的。。。