有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java节点。字符串的js Hmac SHA256 base64

我正在用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");
}

但我对node还是很陌生。js和我正试图找出如何在那里做同样的事情。这就是我得到的:

var crypto = require('crypto');
var sha256 = crypto.createHash('HMAC-SHA256').update('Message').digest("base64");

我怎样才能让他们也这么做?我还是没找到节点里的盐。js。 建议

编辑: 下面的答案帮助我找到了解决方案。如果其他安卓用户有此问题,则此代码适用于我:

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");
}

在这个节点中:

var crypto = require('crypto');
var hash = crypto.createHmac('SHA256', "secret").update("Message").digest('base64');

共 (2) 个答案

  1. # 1 楼答案

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

    I'm still missing the salt in node.js

    您似乎没有在Java代码中使用salt

  2. # 2 楼答案

    您可以使用以下行:

    let test = crypto.createHmac('sha256', "key").update("json").digest("base64");
    

    最后转换为base64