我试图在Java中解密C加密的数据,但没有成功。我使用的是128位的密钥和块大小以及pkcs7填充。这是C代码:
public byte[] Encrypt(byte[] data, byte[] key)
{
using (var ms = new MemoryStream())
{
using (var aes = RijndaelManaged.Create())
{
aes.Key = key;
aes.IV = key;
var stream = new CryptoStream(ms, aes.CreateEncryptor(aes.Key, aes.IV), CryptoStreamMode.Write);
stream.Write(data, 0, data.Length);
stream.FlushFinalBlock();
return ms.ToArray();
}
}
}
这是Java代码:
private static Key generateKey() throws Exception {
Key key = new SecretKeySpec(Files.readAllBytes(Paths.get("D:/Temp/cr.key")), "AES");
return key;
}
public static byte[] decrypt(byte[] encryptedData) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
IvParameterSpec ivSpec = new IvParameterSpec(key.getEncoded());
c.init(Cipher.DECRYPT_MODE, key, ivSpec);
System.out.println(c.getBlockSize());
c.update(encryptedData);
byte[] decValue = c.doFinal();
return decValue;
}
public static void main(String[] args) throws Exception {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] bb = decrypt(Files.readAllBytes(Paths.get("d:\\Temp\\cr~\\OEBPS\\Chapter001.html")));
//decompressFile(bb, new File("D:\\Temp\\enc.html"));
}
知道怎么回事吗?
谢谢
更新
对不起,我真傻,我忘了写真正的错误信息。这里是:
线程“main”javax.crypto.badpaddingexception:pad块中的异常
损坏时间
org.bouncyCastle.jcajce.provider.symmetric.util.baseBlockCipher.EngineDoFinal(未知
(来源)javax.crypto.cipher.dofinal(cipher.java:1970)
谢谢
最佳答案
当处理完一个完整的密文块时,Cipher.update(byte[]): byte[]
将返回数据。
注意:显然不是这个问题的答案,因为异常指向另一个错误。但上面代码中的一个错误仍然存在。
关于c# - AES加密C#解密Java?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16218026/