首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >`CryptoJS.HmacSHA256`的C#等价物是什么

`CryptoJS.HmacSHA256`的C#等价物是什么
EN

Stack Overflow用户
提问于 2021-07-01 22:48:20
回答 1查看 54关注 0票数 1

我有一些用javascript编写的代码,如下所示,工作正常:

代码语言:javascript
运行
复制
var generateSignature = function(apiKey, apiSecret, meetingNumber, role) {

    // Prevent time sync issue between client signature generation and zoom 
    var timestamp = new Date().getTime() - 30000;
    var msg = btoa(apiKey + meetingNumber + timestamp + role);
    var hash = window.CryptoJS.HmacSHA256(msg, apiSecret);
    var hashedBaseItems = CryptoJS.enc.Base64.stringify(hash);
    var encodableString = apiKey + "." + meetingNumber + "." + timestamp + "." + role + "." + hashedBaseItems;
    signature = btoa(encodableString);
    return signature;
}

我正在尝试将它们转换为C#等效项,但结果好坏参半。这是我到目前为止所知道的:

代码语言:javascript
运行
复制
    public string GenerateSignature(int role, long meetingNumber)
    {
        // Prevent time sync issue between client signature generation and zoom 
        long timeStamp = this.getLinuxEpochTimestamp() - 30000;

        string baseItems = _plusConfig.Value.ZoomApiKey + meetingNumber + timeStamp + role;
        string msg = this.jsbtoaEquivalentEncoding(baseItems);
        string hashedBaseItems = generateHash(msg, _plusConfig.Value.ZoomApiSecret);
        string dottedItems = _plusConfig.Value.ZoomApiKey + "." + meetingNumber + "." + timeStamp + "." + role + "." + hashedBaseItems;

        return this.jsbtoaEquivalentEncoding(dottedItems);
    }

    private long getLinuxEpochTimestamp()
    {
        return (long) DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
    }

    private string jsbtoaEquivalentEncoding(string toEncode)
    {
        byte[] bytes = Encoding.GetEncoding(28591).GetBytes(toEncode);
        string toReturn = System.Convert.ToBase64String(bytes);
        return toReturn;
    }

    private static string generateHash(string str, string cypherkey)
    {
        // based on CryptoJS.enc.Base64.parse
        byte[] keyBytes = Convert.FromBase64String(cypherkey);

        using (HMACSHA256 hmacsha256 = new HMACSHA256(keyBytes))
        {
            byte[] hashmessage = hmacsha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
            return Convert.ToBase64String(hashmessage);
        }
    }

generateHash函数返回与CryptoJS.HmacSHA256函数完全不同的内容时,我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 04:10:51

代码语言:javascript
运行
复制
private static string generateHash(string str, string cypherkey)
{
    var encoding = new System.Text.ASCIIEncoding();

    var messageBytes = encoding.GetBytes(str);
    var keyBytes = encoding.GetBytes(cypherkey);

    using var hmacsha256 = new HMACSHA256(keyBytes);
    var hashmessage = hmacsha256.ComputeHash(messageBytes);
    return Convert.ToBase64String(hashmessage);
}

应该可以解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68212357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档