2011-04-15 30 views
0

我使用一个回报率的项目如下:默认情况下ruby-aes使用填充吗?

somepass =Aes.encrypt_buffer(128, 'ECB', some_cypher_key, nil, pain_string)

的默认操作或不使用此lib和方法ECB使用填充?

我最终试图做的是有一个RoR应用程序和一个Java应用程序能够创建相同的简单字符串中相同的加密字符串。

在Java代码中使用: cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE");

的这两行代码不会产生相同的加密密钥。

+0

我希望你的意思是说,他们不会创建相同的加密块而不是相同的加密密钥? – Milan 2011-04-15 19:02:02

回答

1

Aes.encrypt_buffer将使用填充,只是不是你期待的那种。它将用n个字节填充块的值,并添加字节的值。也就是说,如果需要添加15个字节,则会填充0x0f,如果需要添加5个字节,则会填充0x05。也就是说,如RFC-5652中所述的PKCS7。

您应该切换到openssl或使用Cipher.getInstance("AES/ECB/PKCS7Padding", "BC")与Java。

+0

感谢米兰。使用提供者BC的PKCS7填充与使用提供者SunJCE的PKCS5填充相同的结果。任何想法为什么是这样?另外我也注意到一些密码在前面用' - '返回了一个加密密钥,但是ruby并不是这样。有什么想法吗?谢谢 – Rafael 2011-04-15 16:18:24

+0

自从我上一次玩pkc标准以来不久,我很快意识到pkcs7只是pkc5的扩展,可以处理更大的块。这就是为什么你会得到相同的结果。因为看起来你的代码应该可以工作,但它并不是最常见的,因为ruby-aes的错误标准实现。我的建议是切换到openssl,然后重试。 – Milan 2011-04-15 18:58:03

+0

有没有什么机会可以获得这些奇怪的密钥,因为我是用错误的方式编码密码中的字节? – Rafael 2011-04-15 19:52:16