<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>jsSHA</title>
</head>
<body>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jsSHA/2.4.2/sha.js"></script>
<script type="text/javascript">
var key = "123456";
var rawStr = "abc";
function getHMACStr() {
var a = new jsSHA("SHA-1", "TEXT");
return a.setHMACKey(key, "TEXT"), a.update(rawStr), a.getHMAC("B64");
}
document.write(getHMACStr());
//結果:8a5qSNRnNFqmPnKoy9i6upJBfOU=
</script>
</body>
</html>
形似:
protected void Page_Load(object sender, EventArgs e)
{
/*
* c# - 嘗試在C#上復制JavaScript哈希 - IT工具網
https://www.coder.work/article/2690380
var key = "35353535353535366363636363",
credentials = "web:web",
shaObj = new jsSHA(credentials, "ASCII"),
hash = shaObj.getHMAC(key, "HEX", "SHA-1", "HEX"); // key and generated hash are hex values
alert("Hash: " + hash);
*/
Response.Write("js:60c9059c9be9bcd092e00eb7f03492fa3259f459");
Response.Write("<br/>");
var key = "123456";
string credentials = "abc";
var encodingCred = new System.Text.ASCIIEncoding();
var encodingKey = new System.Text.ASCIIEncoding();
//byte[] keyByte = encodingKey.GetBytes(key);
byte[] keyByte = StringToByteArray(key);
byte[] credentialsBytes = encodingCred.GetBytes(credentials);
using (var hmacsha1 = new HMACSHA1(keyByte))
{
byte[] hashmessage = hmacsha1.ComputeHash(credentialsBytes);
string hash = BitConverter.ToString(hashmessage).Replace("-", string.Empty).ToLower();
Response.Write("c#:" + hash);
}
Response.End();
}
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
問題:c#的如何改成像上面js的那樣,用 a.getHMAC("B64")的?
參考文章:
c# - 嘗試在C#上復制JavaScript哈希 - IT工具網
https://www.coder.work/article/2690380
c# - How do you convert a byte array to a hexadecimal string, and vice versa? - Stack Overflow
https://stackoverflow.com/questions/311165/how-do-you-convert-a-byte-array-to-a-hexadecimal-string-and-vice-versa/311179#311179
uj5u.com熱心網友回復:
Caligatio/jsSHA: A JavaScript/TypeScript implementation of the complete Secure Hash Standard (SHA) family (SHA-1, SHA-224/256/384/512, SHA3-224/256/384/512, SHAKE128/256, cSHAKE128/256, and KMAC128/256) with HMAC.https://github.com/Caligatio/jsSHA
uj5u.com熱心網友回復:
byte[] hashmessage = hmacsha1.ComputeHash(Encoding.UTF8.GetBytes("abc"));var b64 = Convert.ToBase64String(hashmessage);
得出的結果跟js計算的一致
uj5u.com熱心網友回復:
我的結果是:8L9Q2JUrEVgn6zg15xObcJIL1c8=,不同啊?
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/36403.html
標籤:C#
