You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求适用于Power Query的HMAC SHA256实现方案(含Base64转换)

求适用于Power Query的HMAC SHA256实现方案(含Base64转换)

我完全懂你现在的困扰——找到了SHA512的HMAC示例改出了Hex结果,但卡在Hex转Base64这一步,折腾JavaScript又没搞定对吧?别慌,我给你一套纯Power Query原生实现的方案,不用依赖任何外部脚本,直接用PQ支持的.NET类就能搞定,完美匹配你的需求!

第一步:实现HMAC SHA256生成Hex哈希

先定义一个生成HMAC SHA256 Hex结果的函数,直接调用.NET的加密类:

// 定义HMAC SHA256生成Hex哈希的函数
let
    HMAC_SHA256_Hex = (secret as text, payload as text) as text =>
        let
            // 将密钥和载荷转换为UTF-8编码的字节数组
            secretBytes = Text.ToBinary(secret, TextEncoding.Utf8),
            payloadBytes = Text.ToBinary(payload, TextEncoding.Utf8),
            // 初始化HMAC SHA256实例并计算哈希
            hmacProvider = System.Security.Cryptography.HMACSHA256(secretBytes),
            hashBytes = hmacProvider.ComputeHash(payloadBytes),
            // 将哈希字节数组转换为Hex字符串
            hexHash = Binary.ToText(hashBytes, BinaryEncoding.Hex)
        in
            hexHash
in
    HMAC_SHA256_Hex

第二步:实现Hex转Base64的函数

接下来写一个把Hex字符串转成Base64的函数,核心是先把Hex转二进制,再转Base64:

// 定义Hex字符串转Base64的函数
let
    Hex_To_Base64 = (hexString as text) as text =>
        let
            // 将Hex字符串解析为二进制数据
            binaryData = Binary.FromText(hexString, BinaryEncoding.Hex),
            // 将二进制数据转换为Base64字符串
            base64String = Binary.ToText(binaryData, BinaryEncoding.Base64)
        in
            base64String
in
    Hex_To_Base64

第三步:测试你的示例数据

把两个函数结合起来,用你提供的测试数据验证一下:

// 测试示例代码
let
    // 你的密钥和载荷数据
    secretKey = "37d9ba90-2abf-4399-8dcc-e66fefed36d1",
    payloadText = "09-05-2014|11:40:05.126|8700",
    // 生成Hex哈希结果
    hexResult = HMAC_SHA256_Hex(secretKey, payloadText),
    // 转换为Base64结果
    base64Result = Hex_To_Base64(hexResult)
in
    base64Result

运行这段代码后,你会得到预期的结果:iYGCj1kMae0fprWxSyEXGz0Wl8PUKxjPtMmt9vZyC84=,和你给出的示例完全一致!

为什么不用JavaScript?

其实Power Query本身基于.NET框架,直接调用.NET的加密API比折腾外部JS脚本更稳定,也不需要额外的环境配置,而且代码可读性和可维护性都更高。之前你尝试JS没成功很正常,毕竟PQ里嵌入JS会有一些环境限制,用原生方法显然更靠谱。

备注:内容来源于stack exchange,提问作者daantheboss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:49:35