我试图通过引用此链接中的示例来生成字符串的sha1 - http://www.sha1-online.com/sha1-java/
public class HashTextTest {
/**
* @param args
* @throws NoSuchAlgorithmException
*/
public static void main(String[] args) throws NoSuchAlgorithmException {
System.out.println(sha1("test string to sha1"));
}
static String sha1(String input) throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] result = mDigest.digest(input.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
}
我不希望从字符串缓冲区 - sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
获得这个混乱的代码行。
有没有其他方法可以做到这一点?
答案 0 :(得分:2)
这里需要的是将一个字节格式化为两个十六进制数字。
sb.append(String.format("%02x", result[i]));
会这样做。
如果您需要大写十六进制数字,请使用
sb.append(String.format("%02X", result[i]));
另外,如果你不介意编码字节之间的空格,你可以使用
new sun.misc.HexDumpEncoder().encode(result).substring(6);
一次编码整个字节[]。