Java AES-256使用IGE解密

时间:2013-07-22 21:16:21

标签: java encryption aes

我正在尝试使用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);
}

1 个答案:

答案 0 :(得分:5)

你快到了。您应该在功能中将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;
}