C# Encrypt Rijndael 256

本文关键字:Rijndael Encrypt | 更新日期: 2023-09-27 18:34:35

我使用堆栈溢出中的这个例子:C# 加密到 PHP 解密

生成函数:

    public static void GenerateKeyIV(out string key, out string IV)
    {
        var rj = new RijndaelManaged()
        {
            Padding = PaddingMode.PKCS7,
            Mode = CipherMode.CBC,
            KeySize = 256,
            BlockSize = 256,
            //FeedbackSize = 256
        };
        key = Convert.ToBase64String(rj.Key);
        IV = Convert.ToBase64String(rj.IV);
    }

加密2功能:

    public static string Encrypt2(string prm_text_to_encrypt, string prm_key, string prm_iv)
    {
        var sToEncrypt = prm_text_to_encrypt;
        var rj = new RijndaelManaged()
        {
            Padding = PaddingMode.PKCS7,
            Mode = CipherMode.CBC,
            KeySize = 256,
            BlockSize = 256,
            //FeedbackSize = 256
        };
        var key = Encoding.ASCII.GetBytes(prm_key);
        var IV = Encoding.ASCII.GetBytes(prm_iv);
        //var key = Convert.FromBase64String(prm_key);
        //var IV = Convert.FromBase64String(prm_iv);
        var encryptor = rj.CreateEncryptor(key, IV);
        var msEncrypt = new MemoryStream();
        var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
        var toEncrypt = Encoding.ASCII.GetBytes(sToEncrypt);
        csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
        csEncrypt.FlushFinalBlock();
        var encrypted = msEncrypt.ToArray();
        return (Convert.ToBase64String(encrypted));
    }

主要课程 :

        Enc2.GenerateKeyIV(out key, out iv);
        string encrypted_url = Enc2.Encrypt2("test tekst todo",key,iv);
        Console.WriteLine(encrypted_url);

==> iv = cCJNWmwOtIBg6zM7Mz/JQV/lcauNMWf50nQk1ZiEKZ4=

==>键 = gNDiEqWk7aGhj1+A2EURW5CPurxHPcfy3F2FTa4peC0=

==> System.Security.Cryptography.CryptographicException:指定的初始化向量 (IV( 与此算法的块大小不匹配。

==>密钥和iv似乎已正确生成,我不明白为什么会收到此错误。

C# Encrypt Rijndael 256

检查您的加密方法 Enc2.Encrypt2() 。它可能使用的块大小与您在 IV 生成方法中指定的块大小不同。

更新:

这样做:

public static string Encrypt2(string prm_text_to_encrypt, string prm_key, string prm_iv)
{
        var sToEncrypt = prm_text_to_encrypt;
        var rj = new RijndaelManaged()
        {
            Padding = PaddingMode.PKCS7,
            Mode = CipherMode.CBC,
            KeySize = 256,
            BlockSize = 256,
            //FeedbackSize = 256
        };
        var key = Convert.FromBase64String(prm_key);
        var IV = Convert.FromBase64String(prm_iv);
        var encryptor = rj.CreateEncryptor(key, IV);
        var msEncrypt = new MemoryStream();
        var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
        var toEncrypt = Encoding.ASCII.GetBytes(sToEncrypt);
        csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
        csEncrypt.FlushFinalBlock();
        var encrypted = msEncrypt.ToArray();
        return (Convert.ToBase64String(encrypted));
}