2012-07-08 160 views
0

我正在通過.Net處理mvc應用程序,以保護web.config中的敏感信息我的模型中有兩個函數使用Triple DES加密和解密信息,但是我這是新的,併成功達到這裏在朋友的幫助下,並在這裏問一些在線幫助。在這兩種加密無法解析符號GetSHA256String

Cannot resolve symbol GetSHA256String

和解密在使用這種方法的功能:

但現在當我米試圖在我的電腦中執行代碼正在此錯誤。

我在這裏是否缺少一個目錄?請幫助我解決這個問題。

public static string Encrypt(string Message, string Passphrase, out byte[] iv) 
    { 
     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; 
     // 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); 
     } 
     finally 
     { 
      TDESAlgorithm.Clear(); 
      HashProvider.Clear(); 
     } 
     return Convert.ToBase64String(Results); 
     //return Encoding.UTF8.GetString(Results); 
    } 

    public static string Decrypt(string Message, string Passphrase, byte[] iv) 
    { 
     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; 
     // Apply the same IV used during encryption 
     TDESAlgorithm.IV = iv; 
     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); 
    } 
+0

所以你說你可以編譯應用程序('Ctrl + Shift + b'),但是你在運行時會出現這個錯誤? – 2012-07-08 15:44:10

+1

你正在用你甚至沒有意識到的方法構建代碼?很明顯,你需要但沒有這個名字的方法。 – 2012-07-08 16:50:23

+1

@GregS我認爲他一直在使用從某個地方找到的引用方法的代碼,但沒有提供所述方法的源代碼。我添加了一個我認爲他需要的方法,因爲我的回答讓我們看看他是否需要這個方法。 – 2012-07-09 00:52:08

回答

2

我相信你需要類似這樣的方法添加到您的類的東西:

private string GetSHA256String(string text) 
{ 
    var UE = new UnicodeEncoding(); 
    var message = UE.GetBytes(text); 

    var hashString = new SHA256Managed(); 
    var hex = string.Empty; 

    var hashValue = hashString.ComputeHash(message); 
    foreach (byte b in hashValue) 
    { 
     hex += String.Format("{0:x2}", b); 
    } 
    return hex; 
} 

讓我知道如果這樣做的伎倆。

+0

非常感謝你的幫助,我的不好之處在於,它給我們帶來了一些內建庫函數的印象。謝謝 :) – Maven 2012-07-10 14:59:44