gpt4 book ai didi

java - 如何从 Java 创建 Meteor 密码?

转载 作者:行者123 更新时间:2023-11-30 05:41:19 27 4
gpt4 key购买 nike

我正在尝试从 Java 代码生成有效的 Meteor 密码。

我知道 Meteor 使用 bcrypt 并且它似乎在前面运行 SHA-256 哈希。但我无法让它发挥作用。有人成功做到过吗?我尝试过这样的事情:

String password = "secret123";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
Charset scs = StandardCharsets.UTF_8;
//Charset scs = StandardCharsets.ISO_8859_1;
byte[] encodedhash = digest.digest(password.getBytes(scs));
String hash = new String(encodedhash, scs);
String bcrypt = BCrypt.hashpw(hash, BCrypt.gensalt());

这会返回一个看起来像有效 bcrypt 密码的字符串,但在我将其存储在 MongoDB 中并尝试从 Meteor 代码登录后,Meteor 不接受它。

最佳答案

我明白了。 SHA-256 的二进制结果必须格式化为十六进制数字字符串。

这是工作代码:

String password = "secret123";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
Charset scs = StandardCharsets.UTF_8;
byte[] encodedhash = digest.digest(password.getBytes(scs));
String hash = toHexString(encodedhash);
String bcrypt = BCrypt.hashpw(hash, BCrypt.gensalt());

使用 toHexString 如下:

    private static char toHex(int nibble) {
final char[] hexDigit = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
return hexDigit[nibble & 0xF];
}
public static String toHexString(byte[] bytes) {
StringBuffer sb = new StringBuffer(bytes.length*2);
for(int i = 0; i < bytes.length; i++) {
sb.append(toHex(bytes[i] >> 4) );
sb.append(toHex(bytes[i]) );
}
return sb.toString();
}

关于java - 如何从 Java 创建 Meteor 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55590334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com