AES加密C#解密Java?
我试图用Java解密C加密的数据,但没有成功。我使用128位的密钥和块大小以及PKCS7填充。以下是C#代码: 这是java代码:AES加密C#解密Java?,c#,java,encryption,aes,rijndael,C#,Java,Encryption,Aes,Rijndael,我试图用Java解密C加密的数据,但没有成功。我使用128位的密钥和块大小以及PKCS7填充。以下是C#代码: 这是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[] d
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.symmetry.util.BaseBlockCipher.engineDoFinal(未知 来源)javax.crypto.Cipher.doFinal(Cipher.java:1970) 谢谢您忘记了,只要处理完一整块密文,就会返回数据
注意:显然不是这个问题的答案,因为异常指向另一个错误。但上述代码中仍然存在一个bug。什么实际不起作用?是被抛出了excpetions还是数据被破坏了?@Fildor,thansk因为指向我,我更新了我的帖子:)这个问题解决了吗Davida?很抱歉,如果我没有更直接的答案…Java应该有一个注释来指示不应忽略返回值。如果忽略返回值,许多方法就没有意义,包括不可变的
String
类的大多数方法。很抱歉这个愚蠢的问题,但这对我有什么帮助?首先,您需要连接两个方法的返回值,或者可以使用doFinal(byte[]):byte[]代替这两个方法。现在你丢失了数据…哦,等等,BadPaddingException不能由此引起,在我的手机上没有看到编辑。不幸的是,BadPaddingException几乎可以由其他所有原因引起,包括不正确的密钥、损坏的密文甚至错误的块密码。
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"));
}