首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中SHA512字符串?

如何在C#中SHA512字符串?
EN

Stack Overflow用户
提问于 2012-07-07 02:28:02
回答 8查看 76.7K关注 0票数 55

我正在试着写一个函数来接受一个字符串并像这样sha512它?

代码语言:javascript
复制
public string SHA512(string input)
{
     string hash;

     ~magic~

     return hash;
}

魔术应该是什么呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-07-07 02:33:09

您的代码是正确的,但是您应该处理SHA512Managed实例:

代码语言:javascript
复制
using (SHA512 shaM = new SHA512Managed())
{
   hash = shaM.ComputeHash(data);
}

512位是64字节。

要将字符串转换为字节数组,需要指定编码。如果你想创建一个哈希码,UTF8是可以的:

代码语言:javascript
复制
var data = Encoding.UTF8.GetBytes("text");    
using (...
票数 86
EN

Stack Overflow用户

发布于 2016-09-21 18:36:40

您也可以使用BouncyCastle来代替使用System.Security.Cryptography的WinCrypt-API:

代码语言:javascript
复制
public static byte[] SHA512(string text)
{
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(text);

    Org.BouncyCastle.Crypto.Digests.Sha512Digest digester = new Org.BouncyCastle.Crypto.Digests.Sha512Digest();
    byte[] retValue = new byte[digester.GetDigestSize()];
    digester.BlockUpdate(bytes, 0, bytes.Length);
    digester.DoFinal(retValue, 0);
    return retValue;
}

如果需要HMAC-version (向散列添加身份验证)

代码语言:javascript
复制
public static byte[] HmacSha512(string text, string key)
{
    byte[] bytes = Encoding.UTF8.GetBytes(text);

    var hmac = new Org.BouncyCastle.Crypto.Macs.HMac(new Org.BouncyCastle.Crypto.Digests.Sha512Digest());
    hmac.Init(new Org.BouncyCastle.Crypto.Parameters.KeyParameter(System.Text.Encoding.UTF8.GetBytes(key)));

    byte[] result = new byte[hmac.GetMacSize()];
    hmac.BlockUpdate(bytes, 0, bytes.Length);
    hmac.DoFinal(result, 0);

    return result;
}
票数 2
EN

Stack Overflow用户

发布于 2012-07-07 02:32:01

我不明白你为什么要期待128。

字节中的8位。64字节。8* 64 = 512位哈希。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11367727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档