2011-04-14 127 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); 
    }