我正在通過.Net處理mvc應用程序,以確保我的敏感信息(如web.config中的信息)我有兩個函數使用三重DES加密和解密信息,然而,我是新來的,併成功地在朋友的幫助下到達這裏,並在這裏問幾個問題。在三重DES加密中切換到CBC模式
我現在卡住的地方是我如何在加密的字符串的末尾添加TDES IV(初始化矢量),以及如何在解密時再次檢索它?我的意思是,你將如何識別加密信息,從這裏IV(初始化矢量)明星?
從How to add and retrieve TDES IV (Initialization Vector) in encrypted string我被建議切換到CBC模式,而不是ECB,因爲ECB不支持IV。
但我很困惑如何切換到CBC?
我真的需要幫助,對於這個問題馬來西亞已經很長時間了,無法解決這個問題。請幫忙。
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
將不勝感激。 Thankyou。
IV是一個固定長度,AES爲16字節。因此,IV從最後開始16個字節。大多數人發現將IV放置在密碼前更容易,因爲在解密之前需要它。 – 2012-07-26 12:01:01
@GregS你能提供一個鏈接或代碼片段來解釋如何放置/檢索IVs嗎? plz – Maven 2012-07-26 12:05:37
不,我不打算向您提供解釋如何從數字中減去16的鏈接。 – 2012-07-26 12:07:05