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似乎已正确生成,我不明白为什么会收到此错误。
检查您的加密方法 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));
}