Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AES加密C#解密Java?_C#_Java_Encryption_Aes_Rijndael - Fatal编程技术网

AES加密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

我试图用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[] 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"));
}