Som*_*ser 1 c# asp.net cryptography rijndael
我必须将信用卡号加密并作为字符串存储在数据库中.我做了以下事情
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);
Run Code Online (Sandbox Code Playgroud)
这是加密功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
我将它们全部存储在数据库中.这似乎很好.但是当我从数据库中检索字符串并使用System.Text.Encoding.UTF8.GetBytes(string)转换为时byte,它会抛出异常
指定的初始化向量(IV)与此算法的块大小不匹配.
是否可以生成IV,使其为16字节?在此先感谢您的回复
在帖子的顶部,您使用BASE64算法将IV字节转换为字符串
string ivString = Convert.ToBase64String(rijMan.IV);
Run Code Online (Sandbox Code Playgroud)
然后在帖子的底部,您使用UTF8编码将字符串读入字节数组
byte[] iv = System.Text.Encoding.UTF8.GetBytes(ivString);
Run Code Online (Sandbox Code Playgroud)
但是你应该再次使用BASE64算法:
byte[] iv = Convert.FromBase64String(ivString);
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我希望你不要将AES密钥(rijMan.Key)存储在与加密信用卡号相同的数据库中,因为这会使整个加密完全无用.
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |