2013-03-12 43 views
1

PHP版本:PHP mcrypt_encrypt結果不等於Java的GNU-加密

mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "11111111111111111111111111111111", "11111111111111111111111111111111", MCRYPT_MODE_CFB, "11111111111111111111111111111111") 
//byte array result:197 225 204 225 20 63 221 2 108 243 172 211 201 17 108 221 53 236 203 147 221 148 73 227 59 26 253 96 240 102 230 118 

Java版本:

byte[] pt = "11111111111111111111111111111111".getBytes(); 
byte[] ct = new byte[32]; 

IMode mode = ModeFactory.getInstance("CFB", "Rijndael", 32); 
Map attributes = new HashMap(); 
attributes.put(IMode.KEY_MATERIAL, "11111111111111111111111111111111".getBytes()); 
attributes.put(IMode.CIPHER_BLOCK_SIZE, new Integer(32)); 
attributes.put(IMode.STATE, new Integer(IMode.ENCRYPTION)); 
attributes.put(IMode.IV, "11111111111111111111111111111111".getBytes()); 
mode.init(attributes); 
mode.update(pt, 0, ct, 0); 
//byte array result: -59 39 -23 -128 94 -42 97 -120 122 -3 -34 -13 70 43 -16 -41 -104 40 -11 83 36 56 -55 66 115 -78 97 -104 58 -38 74 -110 

PHP mcrypt_encrypt結果不等於Java的GNU的密碼。

這真的很奇怪。我檢查了所有的密鑰大小,塊大小,vi大小都是一樣的。

+0

你可以嘗試打印所有輸入/輸出爲十六進制? +1,因爲我不知道這個Java/GNU API。如果這個不起作用,你可以嘗試更常見的輕量級Bouncy Castle API。 – 2013-03-12 18:30:31

回答

0

嘗試使用MCRYPT_MODE_ECB而不使用iv。也請確保你的塊大小是16.

+0

不可以。您不能在Java版本和PHP版本 – WooD 2013-03-12 15:46:32

+1

中更改任何加密模式,算法和密鑰大小,但是您是否也在php上使用32塊大小?請填充您的輸入,以便獲得嚴格的32位大小,因爲我看到您在java中使用32。 – Amir 2013-03-13 04:37:46

+0

解決!在PHP中的關鍵尺寸是16個字節而不是32個字節 – WooD 2013-03-13 06:19:18