Search code examples
c#encryption

C# Encrypt Rijndael 256


I use this example from stackoverflow : C# Encryption to PHP Decryption

GENERATE FUNCTION :

    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);
    }

Encrypt 2 FUNCTION :

    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));
    }

MAIN PROGRAM :

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

==> iv = cCJNWmwOtIBg6zM7Mz/JQV/lcauNMWf50nQk1ZiEKZ4=

==> key = gNDiEqWk7aGhj1+A2EURW5CPurxHPcfy3F2FTa4peC0=

==> System.Security.Cryptography.CryptographicException: Specified initialization vector (IV) does not match the block size for this algorithm.

==> the key and iv seem to be properly generated, I dont understand why I receive this error.


Solution

  • Check your encryption method Enc2.Encrypt2(). It may be using a different block size from what you specified in your IV generation method.

    UPDATE:

    Do this:

    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));
    }