【发布时间】:2014-04-28 04:08:43
【问题描述】:
我必须将信用卡号加密并作为字符串存储在数据库中。我执行以下操作
RijndaelManaged rijMan = new RijndaelManaged();
byte[] encrypt = Encrypt(txtCredit.Text, rijMan.Key, rijMan.IV);
string card = Convert.ToBase64String(encrypt);
string key = Convert.ToBase64String(rijMan.Key);
string iv = Convert.ToBase64String(rijMan.IV);
这是加密功能:
public static byte[] Encrypt(string message, byte[] key, byte[] iv)
{
byte[] encrypted;
using (RijndaelManaged rijMan = new RijndaelManaged())
{
rijMan.Key = key;
rijMan.IV = iv;
ICryptoTransform encrypt = rijMan.CreateEncryptor(rijMan.Key, rijMan.IV);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
{
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write(message);
}
encrypted = ms.ToArray();
}
}
}
return encrypted;
}
我将它们全部存储在数据库中。这似乎很好。但是当我从数据库中取回字符串并使用System.Text.Encoding.UTF8.GetBytes(string) 转换为byte 时,它会引发异常
指定的初始化向量 (IV) 与此算法的块大小不匹配。
是否可以生成 16 字节的 IV?提前感谢您的回复
【问题讨论】:
标签: c# asp.net cryptography rijndael