cri*_*vyl 2 java hex integer sha1
在Internet上我发现这段代码生成SHA1哈希:
public static String hash(String str) {
try {
MessageDigest mg = MessageDigest.getInstance("SHA-1");
byte[] result = mg.digest(str.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();
} catch (NoSuchAlgorithmException e) {
System.err.println("SHA-1 not found.");
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
但为什么会这样(result[i] & 0xff) + 0x100?
字节签名:它们可能是否定的.当通过Integer.toString()生成以"FFFFFF"开头的字符串处理负字节时,但这不会发生正字节,因此结果字符串的长度不固定.该& 0xff字节为无符号整数转换.然后添加0x100以确保十六进制字符串为3个字符长; 这是必需的,因为我们想要一个每个字节有2个十六进制数字的字符串,但是0到15之间的字节只产生1个字符.最后,第三个数字被丢弃substring(1).
我建议用StringBuilder替换StringBuffer,因为它稍微高效一点,并且还指定了初始缓冲区长度:
StringBuilder sb = new StringBuilder(result.length * 2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |