我正在通過.Net處理mvc應用程序,以確保我的敏感信息(如web.config中的信息)的安全我有兩個函數使用三重DES加密和解密信息,然而,我是新來的,併成功通過朋友的幫助達成。使用三重DES解密信息時出現錯誤數據
加密功能工作正常但是並返回我回到正確的字符串時,我試圖解密我得到這條線上的解密功能的
Exception Details: System.Security.Cryptography.CryptographicException: Bad Data.
錯誤相同的字符串:
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
我試圖去解決它在我列爲註釋代碼幾種方法,但他們並沒有幫助,請幫我出這一點。
public static string Encrypt(string Message, string Passphrase)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String(Passphrase)));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToEncrypt = UTF8.GetBytes(Message);
try
{
ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
}
finally
{
TDESAlgorithm.Clear();
HashProvider.Clear();
}
return Convert.ToBase64String(Results);
//return Encoding.UTF8.GetString(Results);
}
public static string Decrypt(string Message, string Passphrase)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String(Passphrase)));
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey;
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);
}
通常在傳輸之前將IV添加到實際密文的前面,以便接收端獲得副本。解密時,只需先閱讀IV,然後用它來解密輸入流的其餘部分。 – rossum
@Iridium&@rossum:謝謝你這麼明確的答案,先生,只有你說的幾件事,我應該在加密字符串的末尾加上'iv',所以你能告訴我怎樣連接兩個字節[]變量我試着這個'結果=結果+ iv;'但它當然不工作? – Maven
IV應在加密字節的_start_處進行,因爲您的收件人將需要它開始加密。在C#中連接數組請參見http://stackoverflow.com/questions/415291/best-way-to-combine-two-or-more-byte-arrays-in-c-sharp – rossum