使用IGE解密Java AES-256

我正试图用IGE解密AES-256。 但我不知道如何使用256位密钥。

在代码密钥中byte []长度 == 32; 长度 == 32; BlockSize == 16

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES")); Xprev = java.util.Arrays.copyOfRange(IV, 0, BlockSize); Yprev = java.util.Arrays.copyOfRange(IV, BlockSize, IV.length); Decripted = new byte[0]; for (int i = 0; i < Message.length; i += BlockSize) { Y = java.util.Arrays.copyOfRange(Message, i, i+BlockSize); X = XOR(cipher.doFinal(XOR(Y,Xprev)), Yprev); Xprev = X; Yprev = Y; Decripted = sumBytes(Decripted, X); } 

你快到了。 您应该在函数XprevYPrev交换,并将XY交换。 警告:仅针对单个测试向量进行测试。

 public static final byte[] ige(final byte[] key, final byte[] IV, final byte[] Message) throws Exception { final Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES")); final int blocksize = cipher.getBlockSize(); byte[] xPrev = Arrays.copyOfRange(IV, 0, blocksize); byte[] yPrev = Arrays.copyOfRange(IV, blocksize, IV.length); byte[] decrypted = new byte[0]; byte[] y, x; for (int i = 0; i < Message.length; i += blocksize) { x = java.util.Arrays.copyOfRange(Message, i, i + blocksize); y = xor(cipher.doFinal(xor(x, yPrev)), xPrev); xPrev = x; yPrev = y; decrypted = sumBytes(decrypted, y); } return decrypted; }