我剛剛開始學習Go,並試圖將現有的小型應用程序從Java重寫爲Go。Go Hmac SHA1生成與Java中的Hmac SHA1不同的哈希
我需要使用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代碼中犯了什麼錯誤?
可否請您提供輸出兩個'java'和'go'兩個鍵和字符串是空的:''「'和'」「'? –