Go Hmac SHA1生成的哈希与Java中的Hmac SHA1不同

阿尔特姆·尼基汀

我刚刚开始学习Go,并且试图将现有的小型应用程序从Java重写为Go。

我需要使用Hmac SHA1算法使用键创建输入字符串的Base64哈希。

我的Java代码:

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;
}

我的Go代码:

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=

我在Go代码中哪里出错了?

icza

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

Go Playground上尝试一下

输出:

RiD1vimxoaouU3VB1sVmchwhfhg=

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

fmt.Println(GetSignature("qwerty", "key"))

您的错误是您将空输入传递给GetSignature()函数。用空的""输入和"key"调用它会产生您提供的非预期输出:

fmt.Println(GetSignature("", "key"))

输出:

9Cuw7rAY671Fl65yE3EexgdghD8=

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

经典 ASP 中的 HMAC SHA1

来自分类Dev

不带HMAC的Swift SHA1功能

来自分类Dev

python - hmac 新 sha1

来自分类Dev

如何生成hash_hmac sha1 php?

来自分类Dev

使用HMAC SHA1的CCKeyDerivationPBKDF通常返回-1

来自分类Dev

使用HMAC SHA1的CCKeyDerivationPBKDF通常返回-1

来自分类Dev

快速实施HMAC和SHA1加密

来自分类Dev

每次按下按钮时,带有HMAC SHA1的Java PBKDF2实现都会返回不同的哈希值?

来自分类Dev

在 VB.NET 中为 HMAC SHA1 编码换行符

来自分类Dev

IOS HMAC-SHA1与标准Java HMAC-SHA1不同

来自分类Dev

在Python中创建HMAC-SHA1哈希的问题

来自分类Dev

MYSQL从SHA1生成登录哈希

来自分类Dev

qca-ossl插件未加载。显示错误:不支持HMAC(SHA1)

来自分类Dev

openssl dgst -sha1 -hmac“ key”产生多余的((stdin)=”前缀和尾随换行符

来自分类Dev

PasswordHash.java无法生成匹配的PBKDF2-HMAC-SHA1哈希

来自分类Dev

如何使用sha-512生成hmac?

来自分类Dev

使用C ++中的键生成HMAC SHA256哈希

来自分类Dev

HMAC_SHA1 在 PHP 和 Lua 上不同

来自分类Dev

HMAC-SHA1给出错误哈希的问题?

来自分类Dev

使用Swift,如何使用SHA1创建OpenSSL HMAC摘要,然后使用严格的encode64进行编码

来自分类Dev

Java和Python生成不同的Hmac-SHA256输出

来自分类Dev

如何快速进行HMAC-SHA1

来自分类Dev

如何将iOS函数转换为Ruby。生成hmac-sha1哈希?

来自分类Dev

在C#中生成HMAC-SHA1

来自分类Dev

在Python中生成YubiOTP验证HMAC-SHA-1签名

来自分类Dev

在Ruby下生成SHA1哈希

来自分类Dev

SHA1 哈希澄清

来自分类Dev

Java和PHP中的SHA1结果不同

来自分类Dev

是否可以检查使用SHA1生成的哈希值是否有效?