猿问

将Java密码哈希方法翻译为JS实现

我想翻译 Blynk IoT 软件中使用的 Java 代码密码哈希,我可以在 Express.js 应用程序中使用它。谢谢你的帮助!

Java代码: https: //www.onlinegdb.com/HJe19lyFB

import java.nio.charset.StandardCharsets;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.Base64;


public class Main {


    public static void main(String[] args){

        System.out.println(makeHash("password","mail@gmail.com")); 

    }


    private static final String SHA_256 = "SHA-256";


    private Main() {

        try {

            MessageDigest.getInstance(SHA_256);

        } catch (NoSuchAlgorithmException e) {

        }

    }


    public static String makeHash(String password, String salt) {

        try {

            MessageDigest md = MessageDigest.getInstance(SHA_256);

            md.update(password.getBytes(StandardCharsets.UTF_8));

            byte[] byteData = md.digest(makeHash(salt.toLowerCase()));

            return Base64.getEncoder().encodeToString(byteData);

        } catch (Exception e) {

            //ignore, will never happen.

        }

        return password;

    }


    private static byte[] makeHash(String val) throws NoSuchAlgorithmException {

        return MessageDigest.getInstance(SHA_256).digest(val.getBytes(StandardCharsets.UTF_8));

    }


}

目前不起作用的解决方案: https ://repl.it/@patryk0493/blynk-password-hashing


神不在的星期二
浏览 80回答 1
1回答

红糖糍粑

您可以使用标准 Node.js加密模块重新实现 Java 密码哈希:const crypto = require('crypto');const makeHash = (data) => {  const hash = crypto.createHash('sha256');  return hash.update(data, 'utf8');}const password = "password";const salt = "mail@gmail.com";const result = makeHash(password)  .update(makeHash(salt).digest())  .digest('base64')console.log(result);
随时随地看视频慕课网APP

相关分类

Java
我要回答