我需要能够在Ruby客户机和Python服务器之间发送加密数据(反之亦然),并且在使用ruby-aesgem/库时遇到了问题。这个库非常容易使用,但是我们在它和pycryptoaes库之间传递数据时遇到了困难。当这些库是唯一被使用的库时,它们看起来还不错,但它们似乎不能很好地跨越语言边界。有什么想法吗?在
编辑:我们正在通过SOAP进行通信,还尝试将二进制数据转换为base64,但没有成功。另外,两者之间的加密/解密几乎相同,但不完全相同(例如,长度相差一个或解密字符串末尾有额外的垃圾字符)
Tags:
我错过了那一点。你的加密/解密没有问题。听起来像是填充问题。AES总是以128位的块对数据进行编码。如果数据的长度不是128位的倍数,则应在加密之前填充数据,加密后需要删除/忽略填充。在
如果没有更多的信息,很难猜测发生了什么。。。在
如果我是你,我会在你的Python和Ruby程序中检查:
AES.new()
中的参数IV
。把他们也扔了。在AES.new()
中的参数mode
。在pyCrypto中有
IV
和mode
的默认值,但不要相信它们与Ruby实现中的相同。使用一种更简单的模式,如CBC。我发现不同的库对模式复杂模式(如PTR)的工作方式有不同的解释。在维基百科有一篇关于如何block cipher modes的文章。在
结果发现,rubyaes自动填充数据以填充16个字符,并在最后一个字符串的末尾添加一个空字符作为分隔符。PyCrypto要求你做16个字符的倍数,所以我们就知道rubyaes在做什么。在
相关问题 更多 >
编程相关推荐