如何使用使用自定义IV的Rijndael-256加密的Java解密密文?

时间:2015-11-05 07:24:54

标签: java c# cryptography rijndael

我在使用c#编写的Rinjndael-256加密和解密的stackoverflow上找到了源代码。它使用自定义IV附加一些额外的字符串。现在我需要在Java平台上使用解密方法。我找到了一些源代码;试图改变和测试。以下是c#的加密方法:

   public static string Encrypt(byte[] text, string key)
    {
        RijndaelManaged aes = new RijndaelManaged();
        aes.KeySize = 256;
        aes.BlockSize = 256;
        aes.Padding = PaddingMode.None;
        aes.Mode = CipherMode.CBC;

        aes.Key = Encoding.Default.GetBytes(key);
        aes.GenerateIV();

        string IV = ("-[--IV-[-" + Encoding.Default.GetString(aes.IV));

        ICryptoTransform AESEncrypt = aes.CreateEncryptor(aes.Key, aes.IV);
        byte[] buffer = text;

        return Convert.ToBase64String(Encoding.Default.GetBytes(Encoding.Default.GetString(AESEncrypt.TransformFinalBlock(buffer, 0, buffer.Length)) + IV));

    }

对我不起作用的java解密方法是:

 public static String decrypt(byte[] cipherText, String encryptionKey) throws Exception{
    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
    SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
    cipher.init(Cipher.DECRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
    return new String(cipher.doFinal(cipherText),"UTF-8");
}

编辑1: 我已经实现了用于解密的php代码。

   function decrypt($text, $pkey)
{
    $key = $pkey;
    $text = base64_decode($text);
    $IV = substr($text, strrpos($text, "-[--IV-[-") + 9);
    $text = str_replace("-[--IV-[-" . $IV, "", $text);

    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $IV), "\0");
}

在Java中是否有任何手动方式实现Rijndael-256?正如有人说的那样

  

任何Sun JCE提供商都不支持除Rijndael之外的其他任何128位块大小

我没有选择使用库

0 个答案:

没有答案