【发布时间】:2013-08-15 10:30:21
【问题描述】:
使用 Java,我在 MessageDigest 实例上使用 SHA1 将字符串值转换为哈希值。我现在已经创建了一个哈希对象:
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] hash = md.digest(password.getBytes("UTF-8"));
我不明白的部分是 b & 0xff 在下面的代码中是什么意思:
StringBuilder sb = new StringBuilder(2*hash.length);
for(byte b : hash) {
sb.append(String.format("%02x", b & 0xff));
}
我知道 %02x 的意思是指定一个格式,其中有两个字符使用十六进制,但我不知道第二个参数是什么,它对每个字节的作用或它的含义。一个简单的解释会很棒! :-)
【问题讨论】:
-
随机附注:如果你可以使用第三方库,这整件事就是
Hashing.sha1().hashString(password, Charsets.UTF_8).toString()和Guava 的一行。