java - char []->字符串->字节[]->字符串…,我迷路了

原文 标签 java hash sha

我想做的是将键入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);
            }
        }


有任何想法吗?

最佳答案

您已经将它钉牢了。只需用困难/错误的方式将char[]转换为String-> new String(password)。 (提示,如果您发现自己在字节和字符之间手动转换,则可能做错了)。

作为附带说明,由于某种原因“抛出”异常。这样可以轻松地跳过以下在引发异常时不应执行的代码。通过捕获异常并将其转换为“ if”块,可以使代码变得比所需的复杂。

相关文章:

java - 如何通过代理从ActiveMQ发送消息

java - 在JAVA中将OPC(开放包装规范)文件转换为平面XML文件

java - 如何解决解析问题?

python - 在txt文件中添加新的联系信息

c++ - SHA-512-给我的密码加盐

java - 从SHA-1更改为SHA-512

java - 在循环中间创建一个新的起点

hash - 如何从Rust中的Blake2 crate 中返回结果?

php - session ID哈希比普通存储更安全吗?

git - 使用SHA编辑文件-git