跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于SHA-256 HMAC 加密的问题
未分類
20 9 月 2021

关于SHA-256 HMAC 加密的问题

斌斌 大佬有话说 :

关于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的图床啦?请问下它的图片可以分组吗?有层级结构吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具