2011-04-14 62 views
5

尋找一種方法在C#中從字符串中執行以下操作。C#SHA-2(512)Base64編碼哈希

public static String sha512Hex(byte[] data)

計算的SHA-512消化,並返回值作爲十六進制字符串。

參數: 數據 - 消化 返回: SHA-512摘要作爲一個十六進制字符串

private static string GetSHA512(string text) 
    { 
     UnicodeEncoding UE = new UnicodeEncoding(); 
     byte[] hashValue; 
     byte[] message = UE.GetBytes(text); 
     SHA512Managed hashString = new SHA512Managed(); 
     string encodedData = Convert.ToBase64String(message); 
     string hex = ""; 
     hashValue = hashString.ComputeHash(UE.GetBytes(encodedData)); 
     foreach (byte x in hashValue) 
     { 
      hex += String.Format("{0:x2}", x); 
     } 
     return hex; 
    } 

回答

13

System.Security.Cryptography.SHA512是你需要什麼?

var alg = SHA512.Create(); 
alg.ComputeHash(Encoding.UTF8.GetBytes("test")); 
BitConverter.ToString(alg.Hash).Dump(); 

LINQPad執行的生產:

EE-26-B0-DD-4A-F7-E7-49-AA-1A-8E-E3-C1-0A-E9-92- 3F-61-89-80-77-2E-47-3F-88-19-A5-D4-94-0E-0D-B2-7A-C1-85-F8-A0-E1-D5-F8-4F- 88-BC-88-7F-D6-7B-14-37-32-C3-04-CC-5F-A9-AD-8E-6F-57-F5-00-28-A8-FF

要從您的問題創建方法:

public static string sha512Hex(byte[] data) 
{ 
    using (var alg = SHA512.Create()) 
    { 
     alg.ComputeHash(data); 
     return BitConverter.ToString(alg.Hash); 
    } 
} 
+0

沒有按照我的希望工作。該文件指出,我需要將字符串轉換爲「SHA-2(512)Base64編碼散列」 – 2011-04-14 17:21:19

+0

僅供參考...我很感激幫助,我不會讓它過去這家公司也弄亂他們的文檔。 – 2011-04-14 17:29:17

+0

是的,好吧,我沒有仔細閱讀標題,你應該在你的問題中提及「-2」部分。不知道在.NET中是否有SHA-2 512位實現,但可能是。 – 2011-04-14 17:39:35

9

得到這個工作。取自here並修改了一下。

public static string CreateSHAHash(string Phrase) 
    { 
     SHA512Managed HashTool = new SHA512Managed(); 
     Byte[] PhraseAsByte = System.Text.Encoding.UTF8.GetBytes(string.Concat(Phrase)); 
     Byte[] EncryptedBytes = HashTool.ComputeHash(PhraseAsByte); 
     HashTool.Clear(); 
     return Convert.ToBase64String(EncryptedBytes); 
    }