【问题标题】:Is there's a hexToString implemented method in Java for Hashing?Java中是否有用于散列的hexToString实现方法?
【发布时间】:2011-04-08 10:25:12
【问题描述】:

我正在使用一种散列字符串的小方法。寻找信息,我可以找到 MessageDigest 可以帮助我完成这项任务,在这里

Compute SHA-1 of byte array

但是现在我有一个问题。似乎在 Java 中散列字符串的过程总是相同的:

  1. 您创建 MessageDigester 并指定要使用的算法。
  2. 您使用要散列的字符串更新 MessageDigester
  3. 然后调用 MessageDigester.digest 并得到一个 byte[]。

如果哈希的最常用功能之一是获取此哈希的字符串版本,为什么(在我提到的问题和其他一些问题中)人们必须实现他们的 convToHex 方法?

private static String convToHex(byte[] data) {
            StringBuilder buf = new StringBuilder();
            for (int i = 0; i < data.length; i++) {
                int halfbyte = (data[i] >>> 4) & 0x0F;
                int two_halfs = 0;
                do {
                    if ((0 <= halfbyte) && (halfbyte <= 9))
                        buf.append((char) ('0' + halfbyte));
                    else
                            buf.append((char) ('a' + (halfbyte - 10)));
                    halfbyte = data[i] & 0x0F;
                } while(two_halfs++ < 1);
            }
            return buf.toString();
        }

是否有 Java 方法允许我在 MessageDigester 返回的 byte[] 和 String 之间进行这种解析?如果存在,它在哪里??如果不是,为什么我必须自己制作方法?

谢谢。

【问题讨论】:

    标签: java hash sha1 message-digest


    【解决方案1】:

    您可以使用Commons Codec,它有一个Hex 类。除此之外,如果您不想包含其他依赖项,则可以将转换编写得更短:

    private final static String HEX_CHARS = "0123456789ABCDEF";
    
    @Override
    public String toString() {
        String res = "";
        for(byte b : data) {
            res += HEX_CHARS.charAt((b >> 4) & 0xF);
            res += HEX_CHARS.charAt(b & 0xF);
        }
        return res;
    }
    

    (我知道,我知道,循环中的字符串连接,我拥有的字节数组具有固定的短长度。随意将其更改为使用StringBuilder。)

    【讨论】:

    • 是的...我不知道那个图书馆,谢谢!!!现在我可以在一行中做到这一点! :)
    猜你喜欢
    • 2021-06-18
    • 2017-04-29
    • 2017-12-03
    • 2011-10-15
    • 1970-01-01
    • 2015-04-29
    • 2011-12-08
    • 2011-03-20
    • 2014-01-16
    相关资源
    最近更新 更多