斌斌 大佬有话说 :
关于SHA-256 HMAC 加密的问题
比如key是111
内容是https://imagedelivery.net/SzNV43bIOhJnWJ5Iz6Cvhg/932c3295-9ef0-43c0-45cf-082dd1d6ed01/public?exp=1632165833
加密后得到的值是1d160cf8c35752b652a3d5fc542634560e7a990091ea1073cd6fb42822f5a349。就是正确的
但是我c# 得到的是4090da18a78252c31e4e43dbb89ec78e79a8d7db3199285ac1204c7043819eab
下面代码有什么问题吗。
public static string Encrypt(string message, string secret)
{
var encoding = new System.Text.UTF8Encoding();
byte[] keyByte = encoding.GetBytes(secret);
byte[] messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < hashmessage.Length; i++)
{
builder.Append(hashmessage.ToString("x2"));
}
return builder.ToString();
}
}
sdqu 大佬有话说 :
HMAC SHA256 你没算错
然而,你应该是没弄对具体算法。
https://imgpp.com/images/2021/09/19/16452651862ae767c.png
斌斌 大佬有话说 :
sdqu 大佬有话说 : 2021-9-20 03:38
HMAC SHA256 你没算错
然而,你应该是没弄对具体算法。
啊。大佬。能给指点下么。可能关键点在下面的代码,不明白作用。
const key = await crypto.subtle.importKey(
"raw",
secretKeyData,
{ name: "HMAC", hash: "SHA-256" },
false,
["sign"]
);
https://developers.cloudflare.com/images/serving-images/serving-private-images-using-signed-url-tokens
sdqu 大佬有话说 :
本帖最后由 sdqu 于 2021-9-20 04:51 编辑
我不懂Web Crypto API,我用我一般的编程理解来说,抛砖引玉,错了别怪我。
你的代码我不看了,我只说CF的代码。
这段是根据你的KEY生成key(注意大小写不同),算法是 HMAC-SHA256,请注意,这个key是用于链接签名的。
const secretKeyData = encoder.encode(KEY);
const key = await crypto.subtle.importKey(
"raw",
secretKeyData,
{ name: "HMAC", hash: "SHA-256" },
false,
["sign"]
);
下面这段,只使用HMAC算法, key为上面生成的,然后为链接生成了签名。其实标准HMAC算法里,应该有一个加密方式,这里没有,我猜是crypto api有个默认的算法,比如SHA1。
const mac = await crypto.subtle.sign(
"HMAC",
key,
encoder.encode(stringToSign)
所以,你把KEY直接拿来链接这里(下面这段)做HMAC SHA256是不对的。
总结:
1. 用你的KEY,做SHA256 HMAC,得到链接加密密钥key
2. 用key,对链接做HMAC。
mmc199 大佬有话说 :
这个斌斌就是逊啦
XiaoFaye 大佬有话说 :
这么快就用上CF的图床啦?请问下它的图片可以分组吗?有层级结构吗?