我需要能够发送的加密数据之间的红宝石客户和Python服务器(反之亦然),并已经具有的麻烦 红宝石aes gem/图书馆。图书馆是很容易使用,但我们已经有麻烦之间传递数据和pyCrypto AES库蟒蛇。这些图书馆似乎是现在他们是唯一一个被使用,但他们似乎没有发挥好跨越语言的界限。任何想法?

编辑:我们正在做的通过肥皂和也试图转换的二进制数据来base64无济于事。此外,它更加密/解密几乎是,但不完全相同,两者之间(例如,长度不同,由一个或有额外的垃圾字端的解密string)

有帮助吗?

解决方案 2

原来实际情况是,红宝石-AES自动焊盘数据以填充16个字符,并贴在最终的字符串作为分隔符的端部的空字符。 PyCrypto需要你做的16个字符的倍数所以这是我们如何想出什么红宝石 - AES在做什么。

其他提示

  

(例如,长度相差一个或存在对解密的字符串的末尾额外垃圾字符)

我错过了位。这没有什么不对您的加密/解密。这听起来像一个填充的问题。 AES总是在128位的块数据进行编码。如果数据的长度不是128个比特的倍数的数据应加密之前被填充和填充需要被移除/加密后忽略。

很难甚至猜发生了什么没有更多的信息...

如果我是你我会检查你的Python和红宝石的程序:

  1. 钥匙是相同的(显然).甩掉他们作为十六和比较每个字节。
  2. 初始化载体是一样的。这是参数 IVAES.new() 在pyCrypto.甩掉他们作为六。
  3. 该模式是相同的。参数 modeAES.new() 在pyCrypto.

有默认值 IVmode 在pyCrypto,但不相信他们是相同的红宝石的实施。使用一种简单的模式,如CBC。我发现,不同的图书馆都有不同的解释,怎样的模式的复杂模式,例如PTR,工作。

维基百科上有一大篇关于如何 block cipher modes.

类取决于你如何传送的加密数据。这可能是你在一种语言写一个文件,然后试图从其他的读入。 Python中(特别是在Windows)要求您指定二进制模式的二进制文件。所以在Python中,假设你要解密那里,你要打开的文件是这样的:

f = open('/path/to/file', 'rb')

在 “B” 表示二进制。如果你正在写的加密数据从Python文件:

f = open('/path/to/file', 'wb')
f.write(encrypted_data)

基本上就是休上面说:检查第四的,密钥大小和链接方式,以确保一切是完全相同

测试两侧independantly,编码的一些信息,并检查Ruby和Python endoded它相同。你假设问题与加密该怎么办,但它可能只是与puts会抛出随机换行符到的数据发送加密数据一样简单。一旦你确定他们正确地对数据进行加密,请检查您收到正是你认为你发送的。一直走,一步一步,直到找到破坏数据的阶段。

另外,我建议使用中包含的红宝石的标准库OpenSSL库,而不是使用外部的宝石。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top