2011-04-15 59 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