首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go Hmac SHA1生成不同于SHA1的散列

Go Hmac SHA1生成不同于SHA1的散列
EN

Stack Overflow用户
提问于 2015-05-15 06:37:45
回答 1查看 6.6K关注 0票数 6

我刚刚开始学习Go,我正在尝试将我现有的小型应用程序从Java重写到Go。

我需要创建输入字符串的Base64散列使用SHA1算法的键。

我的代码

代码语言:javascript
复制
private String getSignedBody(String input, String key) {
    String result = "";
    try {
        SecretKeySpec signingKey = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA1");
        Mac mac = Mac.getInstance("HmacSHA1");
        mac.init(signingKey);
        byte[] rawHmac = mac.doFinal(input.getBytes("UTF-8"));
        result = Base64.encodeToString(rawHmac, false);
    } catch (Exception e) {
        Logger.error("Failed to generate signature: " + e.getMessage());
    }
    return result;
}

我的围棋代码:

代码语言:javascript
复制
func GetSignature(input, key string) string {
    key_for_sign := []byte(key)
    h := hmac.New(sha1.New, key_for_sign)
    h.Write([]byte(input))
    return base64.StdEncoding.EncodeToString(h.Sum(nil))
}

问题是Go代码生成的输出不是预期的。例如,对于输入字符串"qwerty"和键"key",Java输出将是RiD1vimxoaouU3VB1sVmchwhfhg=,Go输出将是9Cuw7rAY671Fl65yE3EexgdghD8=

我在哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-15 07:02:24

您提供的Go代码提供了与Java代码完全相同的输出。

围棋游乐场上试一试。

输出:

代码语言:javascript
复制
RiD1vimxoaouU3VB1sVmchwhfhg=

您在调用GetSignature()函数时犯了错误。调用它就像链接的示例代码一样:

代码语言:javascript
复制
fmt.Println(GetSignature("qwerty", "key"))

您的错误是将一个空输入传递给您的GetSignature()函数。使用空的""输入和"key"键调用它会产生您提供的意外输出:

代码语言:javascript
复制
fmt.Println(GetSignature("", "key"))

输出:

代码语言:javascript
复制
9Cuw7rAY671Fl65yE3EexgdghD8=
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30253057

复制
相关文章

相似问题

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