python - 无法从消息包(Ruby openssl)解码 python 中的加密字符串

标签 python ruby msgpack messagepack

我在对通过消息包从套接字连接获取的某些数据进行解密时遇到了问题,因此无法对它进行解密。我从 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)。我可以在每个脚本中很好地解密和加密(而不是通过消息包通过套接字发送它)

有什么想法吗?

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

最佳答案

我最近遇到了问题,显然是网络弄乱了我的密码字符。在通过网络发送密码之前,我尝试在 base64 中对密码进行编码,就像魔术一样完美地工作。

使用:

require 'base64'

cipher = Base64.encode64(cipher)

-通过网络发送密码-

cipher = Base64.decode64(cipher)

关于python - 无法从消息包(Ruby openssl)解码 python 中的加密字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12040902/

相关文章:

python - 在 Tensorflow CIFAR-10 教程中拆分训练/验证中的数据

python - 如何使设备与远程数据库安全通信?

Ruby block 参数名称

c# - 将 MsgPack 时间戳 64 字段转换为 DateTime 时出现错误结果

javascript - 如何从 Javascript 调用 MessagePack RPC 服务?

python - 根据 Pandas 中特定键的出现将长序列转换为数据框

python:是否有比内置版本更强大的json版本

ruby - ruby block 的动态嵌套

mysql - 在 ruby​​ on Rails 上创建具有多个关联的对象

javascript - 在 Javascript(浏览器)中获取 YAML 或 MsgPack