亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從爪哇創建流星密碼?

如何從爪哇創建流星密碼?

人到中年有點甜 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 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號