繁体   English   中英

AES加密C#解密Java?

[英]AES encrypt C# decrypt Java?

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

知道什么可能是错的吗?

谢谢

UPDATE


对不起,我多么愚蠢,我忘了写实际的错误信息。 这里是:

线程“main”中的异常javax.crypto.BadPaddingException:在javax.crypto.Cipher.doFinal(Cipher.java:1970)的org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(未知来源)中,pad块损坏

谢谢

您忘记了Cipher.update(byte[]): byte[]将在处理完整的密文块时返回数据。

注意:显然不是这个问题的答案,因为异常指向另一个错误。 但上面代码中的一个错误就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM