2012-07-08 31 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