这AES图书馆在使用红宝石/蟒蛇?
-
10-07-2019 - |
题
我需要能够发送的加密数据之间的红宝石客户和Python服务器(反之亦然),并已经具有的麻烦 红宝石aes gem/图书馆。图书馆是很容易使用,但我们已经有麻烦之间传递数据和pyCrypto AES库蟒蛇。这些图书馆似乎是现在他们是唯一一个被使用,但他们似乎没有发挥好跨越语言的界限。任何想法?
编辑:我们正在做的通过肥皂和也试图转换的二进制数据来base64无济于事。此外,它更加密/解密几乎是,但不完全相同,两者之间(例如,长度不同,由一个或有额外的垃圾字端的解密string)
解决方案 2
原来实际情况是,红宝石-AES自动焊盘数据以填充16个字符,并贴在最终的字符串作为分隔符的端部的空字符。 PyCrypto需要你做的16个字符的倍数所以这是我们如何想出什么红宝石 - AES在做什么。
其他提示
(例如,长度相差一个或存在对解密的字符串的末尾额外垃圾字符)
我错过了位。这没有什么不对您的加密/解密。这听起来像一个填充的问题。 AES总是在128位的块数据进行编码。如果数据的长度不是128个比特的倍数的数据应加密之前被填充和填充需要被移除/加密后忽略。
很难甚至猜发生了什么没有更多的信息...
如果我是你我会检查你的Python和红宝石的程序:
- 钥匙是相同的(显然).甩掉他们作为十六和比较每个字节。
- 初始化载体是一样的。这是参数
IV
在AES.new()
在pyCrypto.甩掉他们作为六。 - 该模式是相同的。参数
mode
在AES.new()
在pyCrypto.
有默认值 IV
和 mode
在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库,而不是使用外部的宝石。