java和javascript为base64 hmac sha256生成不同的输出

nom7f22z  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(557)

当我尝试在java和javascript中创建类似的函数来输出hmacsha256加密的base64字符串时,给出的输出是不同的。
javascript语言

var dataToSign = "message";
var secret = "secret";
function generateAuthHeader(dataToSign){
    var hash = CryptoJS.HmacSHA256(dataToSign,secret);
    return hash.toString(CryptoJS.enc.Base64);

哪些输出

+eZuF5tnR65UEI+C+K3os8Jddv0wr95sOVgixTAZYWk=

java

String key="secret"; 
String dataToSign = "message"; 
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
System.out.println(Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8"))));

哪些输出

i19IcCmVwVmMVz2x4hhmqbgl1KeU0WnXBgoDYFeWNgs=

我的代码有错误吗?

arknldoa

arknldoa1#

它的价值是什么 hash 在javascript版本中 sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8")) 在java版本中?
另外,请尝试用javascript获取base64 repr:

CryptoJS.enc.Base64.stringify(hash);

而不是 hash.toString ?
utf-8在java版本中也不应该有什么不同,但是我会尝试删除它们,然后简单地做 getBytes() 到处都是。

相关问题