我必须转换一个哈希字符串的JAVA函数。
这是一个功能:
private static String hmacSha256(String value, String key) throws NoSuchAlgorithmException, InvalidKeyException {
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(value.getBytes());
return String.format("%0" + (rawHmac.length << 1) + "x", new BigInteger(1, rawHmac));
}
我的疑问是:这个函数有2个参数:
我已经使用过Sha256,但我总是只使用一个参数(一个字符串来加密)
请问,我怎样才能在c#中写这个函数,或者有没有人可以向我解释逻辑?谢谢
答案 0 :(得分:2)
您可以使用HMACSHA256
类来使其正常工作:
private static string ComputeHash(string key, string value)
{
var byteKey = Encoding.UTF8.GetBytes(key);
string hashString;
using (var hmac = new HMACSHA256(byteKey))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(value));
hashString = Convert.ToBase64String(hash);
}
return hashString;
}
答案 1 :(得分:0)
这不是简单的SHA256,这是HMACSHA256,并且已经在.Net中有一个类。 HMACSHA256