繁体   English   中英

Java 和 javascript 为 Base64 Hmac SHA256 生成不同的输出

[英]Java and javascript generates different output for Base64 Hmac SHA256

当我尝试在 Java 和 javascript 中创建类似的函数来输出 Hmac SHA 256 加密的 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=

爪哇

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=

我的代码有错误吗?

JavaScript 版本中hash的值是sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8")) ,Java 版本中sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8"))的值是sha256_HMAC.doFinal(dataToSign.getBytes("UTF-8"))

另外,您能否尝试在 JavaScript 中获取 Base64 repr:

CryptoJS.enc.Base64.stringify(hash);

而不是hash.toString

此外,UTF-8 不应该对 Java 版本产生影响,但我会尝试删除它们并在任何地方简单地执行getBytes()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM