How to write the follow simple sha1Hex() in C#(.net) ?
How to write the follow simple sha1Hex(sbyte[] data, string key) in C#(.net) ?
下面是Java的代码,c#要怎么写这个简单的算法,要带key的。
public static string sha1Hex(sbyte[] data, string key)
{
sbyte[] keyBytes = key.GetBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac;
StringBuilder sb = new StringBuilder();
try
{
mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
sbyte[] rawHmac = mac.doFinal(data);
foreach (sbyte b in rawHmac)
{
sb.Append(byteToHexString(b));
}
}
catch (Exception)
{
}
return sb.ToString();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
http://stackoverflow.com/a/6533030/2586541
解说
可以用
HMAC.Create(hmacname)
来创建HMAC
实例。这里 hmacname 包括如下一些(但不完全)hmacmd5
hmacsha1
hmacsha256
hmacsha384
hmacsha512
之后设置
HMAC
实例的Key
:hamc.Key = ....
之后再计算得到结果就好
hmac.ComputeHash(data)
,这里data
可以是个byte[]
也可以是Stream
。把字符串变成
byte[]
可以用Encoding.GetBytes()
实例方法,常用的 Encoding 有Encoding.Default
,系统默认的编码,比如中文 Windows 是 GBKEncoding.UTF8
最后需要把结果
byte[]
变成十六进制,BitConvert.ToString(byte[])
可以做到,不过得到的是像这样的:12-34-56-78-AB-CD
,如果不需要间隔符可以把-
号替换掉。示例
https://dotnetfiddle.net/su16Ve