Java AES-256用IGE解密
我正试图用IGE解密AES-256。但我不知道如何使用256位密钥 在代码键中-字节[],长度==32IV。长度==32块大小==16Java AES-256用IGE解密,java,encryption,aes,Java,Encryption,Aes,我正试图用IGE解密AES-256。但我不知道如何使用256位密钥 在代码键中-字节[],长度==32IV。长度==32块大小==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); Ypr
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);
}
Cipher-Cipher=Cipher.getInstance(“AES/ECB/NoPadding”);
cipher.init(cipher.DECRYPT_模式,新的SecretKeySpec(key,“AES”));
Xprev=java.util.Arrays.copyOfRange(IV,0,BlockSize);
Yprev=java.util.Arrays.copyOfRange(IV,BlockSize,IV.length);
Decripted=新字节[0];
对于(int i=0;i
你就快到了。您应该在函数中用YPrev
交换Xprev
,用Y
交换X
。警告:仅针对单个测试向量进行测试
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;
}
公共静态最终字节[]ige(最终字节[]键,最终字节[]IV,
最后一个字节[]消息)引发异常{
final Cipher=Cipher.getInstance(“AES/ECB/NoPadding”);
cipher.init(cipher.DECRYPT_模式,新的SecretKeySpec(key,“AES”));
final int blocksize=cipher.getBlockSize();
字节[]xPrev=Arrays.copyOfRange(IV,0,blocksize);
字节[]yPrev=Arrays.copyOfRange(IV,blocksize,IV.length);
字节[]已解密=新字节[0];
字节[]y,x;
for(int i=0;i
你就快到了。您应该在函数中用YPrev
交换Xprev
,用Y
交换X
。警告:仅针对单个测试向量进行测试
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;
}
公共静态最终字节[]ige(最终字节[]键,最终字节[]IV,
最后一个字节[]消息)引发异常{
final Cipher=Cipher.getInstance(“AES/ECB/NoPadding”);
cipher.init(cipher.DECRYPT_模式,新的SecretKeySpec(key,“AES”));
final int blocksize=cipher.getBlockSize();
字节[]xPrev=Arrays.copyOfRange(IV,0,blocksize);
字节[]yPrev=Arrays.copyOfRange(IV,blocksize,IV.length);
字节[]已解密=新字节[0];
字节[]y,x;
for(int i=0;i
解释问题所在,InvalidKeyException
?附议。实际的问题是什么?解密后的数据不等于提供的数据。你能把它变成一个吗?这肯定无法编译。哈哈,挑战者你好解释出了什么问题,InvalidKeyException
?附议。实际的问题是什么?解密后的数据不等于提供的数据。你能把它变成一个吗?这肯定不会编译。哈哈,挑战者你好