为了账号安全,请及时绑定邮箱和手机立即绑定

如何从爪哇创建流星密码?

如何从爪哇创建流星密码?

人到中年有点甜 2022-09-28 14:25:48
我正在尝试从Java代码生成有效的流星密码。我知道流星使用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中并尝试从流星代码登录后不接受它。
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

我想通了。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());

使用十六进制字符串,如下所示:


    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();

    }


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号