我用這個例子,從計算器: C# Encryption to PHP DecryptionC#加密的Rijndael 256
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);
}
加密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));
}
主程序:
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似乎正確生成,我不明白爲什麼我收到此錯誤。
有你有它。您將密鑰和IV編碼爲Base64,但將其解碼爲ASCII。 –