我正在尝试使用IGE解密AES-256。但我不知道如何使用256位密钥。
代码密钥 - byte [] length == 32; IV 。长度 == 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);
}
答案 0 :(得分:5)
你快到了。您应该在功能中将Xprev
与YPrev
交换,并将X
与Y
交换。警告:仅针对单个测试向量进行测试。
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;
}