Node.js字符串的Hmac SHA256 base64

jus*_*ser 15 java android node.js

我正在使用java和带有节点的服务器制作应用程序,并且作为身份验证方法,我想比较两个字符串.

在java中我正在这样做:

try {
    String secret = "secret";
    String message = "Message";

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    sha256_HMAC.init(secret_key);

    String hash = Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes()));
    System.out.println(hash);
} catch (Exception e){
    System.out.println("Error");
}
Run Code Online (Sandbox Code Playgroud)

但我仍然是node.js的新手,我正在试图弄清楚如何在那里做同样的事情.这就是我所拥有的:

var crypto = require('crypto');
var sha256 = crypto.createHash('HMAC-SHA256').update('Message').digest("base64");
Run Code Online (Sandbox Code Playgroud)

我怎样才能让他们做同样的事情呢?我仍然缺少node.js中的salt.建议?

编辑: 下面的答案帮助我找到了解决方案.如果其他Android用户有这个问题,那么这段代码对我有用:

try {
    String secret = "secret";
    String message = "Message";

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
    SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    sha256_HMAC.init(secret_key);
    byte[] s53 = sha256_HMAC.doFinal(message.getBytes());
    String hash = Base64.encodeToString(s53, Base64.DEFAULT);
    Log.e("beadict", hash);
} catch (Exception e){
    System.out.println("Error");
}
Run Code Online (Sandbox Code Playgroud)

这在节点中:

var crypto = require('crypto');
var hash = crypto.createHmac('SHA256', "secret").update("Message").digest('base64');
Run Code Online (Sandbox Code Playgroud)

小智 14

您可以使用这一行:

let test = crypto.createHmac('sha256', "key").update("json").digest("base64");
Run Code Online (Sandbox Code Playgroud)

最后转换为 base64。


Ale*_*hov 8

如果您想使用HMAC,则需要使用该方法crypto.createHmac(algorithm, key).

我仍然缺少node.js中的salt

您似乎不在Java代码中使用salt ...