1

私がやろうとしているのは、jPasswordFieldに入力されたパスワードをSHA-256ハッシュに変換することです。私は歩き回っていて、パスワードを文字列として保存している場合にこれを行う方法を見つけましたが、使用しているフィールドはchar []を返しているので、どうすればよいかを推測することになりました...最初はパスワードが同じであっても結果は異なりますが、定数であるため、今では私はより近くにいると思います。しかし、それはまだの出力としてではありません

echo -n 'abc' | sha256sum

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

私のアクションの出力(同じ入力に対する)は

86900f25bd2ee285bc6c22800cfb8f2c3411e45c9f53b3ba5a8017af9d6b6b05

私の行動は次のようになります:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        NoSuchAlgorithmException noSuchAlgorithmException = null;
        MessageDigest messageDigest = null;
        try {
            messageDigest = MessageDigest.getInstance("SHA-256");

        } catch (NoSuchAlgorithmException ex) {
            noSuchAlgorithmException = ex;
        }
        if (noSuchAlgorithmException != null) {
            System.out.println(noSuchAlgorithmException.toString());
        }
        else {
            UnsupportedEncodingException unsupportedEncodingException = null;
            byte[] hash = null;
            char[] password = jPasswordField1.getPassword();
            StringBuffer stringBuffer = new StringBuffer();
            for (char c : password) {
                if (c > 0 && c < 16) {
                    stringBuffer.append("0");
                }
                stringBuffer.append(Integer.toHexString(c & 0xff));
            }
            String passwordString = stringBuffer.toString();
            try {
                hash = messageDigest.digest(passwordString.getBytes("UTF-8"));
            } catch (UnsupportedEncodingException ex) {
                unsupportedEncodingException = ex;
            }
            if (unsupportedEncodingException != null) {
                System.out.println(unsupportedEncodingException.toString());
            }
            else {
                stringBuffer = new StringBuffer();
                for (byte b : hash) {
                    stringBuffer.append(String.format("%02x", b));
                }
                String passwordHashed = stringBuffer.toString();
                System.out.println(passwordHashed);
            }
        }

何か案は?

4

2 に答える 2

1

あなたはほとんどそれを釘付けにしました。char[]からString->に変換するのは難しい/間違った方法new String(password)でした。必要なのはそれだけです。(ヒント、バイトと文字を手動で変換していることに気付いた場合は、おそらく間違っています)。

ちなみに、例外は理由で「スロー」されます。これにより、例外がスローされたときに実行されるべきではない次のコードを簡単にスキップできます。例外をキャッチして「if」ブロックに変換することで、コードを必要以上に複雑にします。

于 2012-05-29T16:07:33.463 に答える
0

これは、と同じハッシュを出力しますsha256sum

public static void main(String[] args) 
    throws NoSuchAlgorithmException, UnsupportedEncodingException {

    char[] password = new char[]{'a', 'b', 'c'};

    MessageDigest messageDigest = null;
    messageDigest = MessageDigest.getInstance("SHA-256");

    byte[] hash = null;

    // This is how you convert a char array into a String without reencoding it into a different set of characters.
    String passwordString = new String(password);

    hash = messageDigest.digest(passwordString.getBytes("UTF-8"));
    StringBuilder sb = new StringBuilder();
    for (byte b : hash) {
        sb.append(String.format("%02x", b));
    }
    String passwordHashed = sb.toString();
    System.out.println(passwordHashed);
}
于 2012-05-29T16:44:08.990 に答える