[英]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.