我正在研究.Net上的mvc应用程序,以保护我的敏感信息,例如web.config中的信息。我有两个使用Triple DES加密和解密信息的功能,但我是新手,在朋友的帮助下成功到达这里并在这里问了几句问题。
我目前遇到的问题是如何在加密字符串的末尾添加TDES IV(初始化向量)以及如何在解密时再次检索它?我的意思是你如何识别加密信息,从这里IV(初始化矢量)明星?
从How to add and retrieve TDES IV (Initialization Vector) in encrypted string我建议切换到CBC模式而不是ECB,因为ECB不支持IV。
但我很困惑如何切换到CBC?
我真的需要这方面的帮助,很长时间以来,ma遇到了这个问题并无法解决问题。请帮忙。
public static string Encrypt(string Message)
{
byte[] iv;
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
// Capture the randomly generated IV
iv = TDESAlgorithm.IV;
byte[] DataToEncrypt = UTF8.GetBytes(Message);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
//var lnght=Results.GetLength(0);
//System.Buffer.BlockCopy(iv, 0, Results, lnght + 1, iv.Length()); //HOW?
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return Convert.ToBase64String(Results);
//return Encoding.UTF8.GetString(Results);
}
public static string Decrypt(string Message)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
// Apply the same IV used during encryption
//TDESAlgorithm.IV = iv; // HOW?
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
try
{
byte[] DataToDecrypt = Convert.FromBase64String(Message);
//byte[] DataToDecrypt = UTF8.GetBytes(Message);
//byte[] DataToDecrypt = Encoding.UTF8.GetBytes(Message);
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); // << ERROR is here.
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return UTF8.GetString(Results);
}
…
…
任何指南,链接或piece of code
都将不胜感激。
三江源。
答案 0 :(得分:4)
要更改为CBC,请将您的代码修改为TDESAlgorithm.Mode = CipherMode.CBC;
以进行加密和解密。
DES是64位块密码,因此需要64位IV,8字节。使用加密安全的RNG,C#具有RNGCryptoServiceProvider
来生成IV,并将其作为参数传递给加密方法。 C#文档将在这里为您提供帮助。
当您加密纯文本时,将IV添加到邮件中并发送整个文本。
解密时,提取传入消息的前八个字节以用作IV。消息的其余部分将形成密文。