簡體   English   中英

將Java密碼散列方法翻譯成JS實現

[英]Translating Java password hashing method to JS implementation

我想翻譯可在 Express.js 應用程序中使用的 Blynk IoT 軟件中使用的 Java 代碼密碼哈希。 謝謝你的幫助!

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

const btoa = require('btoa');
var util = require('util');
const KJUR = require('jsrsasign');

const password = 'password';
const email = 'mail@gmail.com';

const options = {"alg": "sha256", "prov": "cryptojs"}

makeHash = (str) => {
  const md = new KJUR.crypto.MessageDigest(options);
  return md.digestString(new util.TextEncoder().encode(str.toLowerCase()))
}

const md = new KJUR.crypto.MessageDigest(options);
md.updateString(new util.TextEncoder().encode(password));
const byteData = md.digest(makeHash(email.toLowerCase()));
const base64 = btoa(byteData)

console.log(base64);

您可以使用標准 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM