Java中是否存在用于散列的hexToString实现方法?

时间:2011-04-08 10:25:12

标签: java hash sha1 message-digest

我正在使用一个哈希字符串的方法。寻找信息,我发现MessageDigest可以帮助我完成这项任务,在这里

  

Compute SHA-1 of byte array

但现在我有一个问题。似乎在Java中散列String的过程始终是相同的:

  1. 您可以创建MessageDigester并指定要使用的算法。
  2. 使用String to hash
  3. 更新MessageDigester
  4. 然后你调用MessageDigester.digest,你得到一个byte []。
  5. 如果哈希最常用的函数之一是获取此哈希的String版本,为什么(在我提到的问题和其他一些问题中)人们必须实现他们的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之间进行解析?如果它存在,它在哪里?如果没有,我为什么要制作自己的方法?

    感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用Commons Codec类的{{3}}。除此之外,如果您不想包含其他依赖项,则可以将转换编写得更短:

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; } 。)