【发布时间】:2014-11-08 09:57:00
【问题描述】:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class JavaMD5 {
public static void main(String[] args) {
String passwordToHash = "MyPassword123";
String generatedPassword = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(passwordToHash.getBytes());
byte[] bytes = md.digest();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
}
generatedPassword = sb.toString();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(generatedPassword);
}
}
这一行是问题:
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
每个部分在这个结构中的作用是什么????
谢谢,很抱歉询问,因为我是 Java 新手。
【问题讨论】:
-
这是一种确保每个字节都表示为两个十六进制数字的 hacky 方法。相当于写
sb.append(String.format("%02x", bytes[i]))。 -
你如何确保它在任何地方都以相同的方式工作......就像不同系统上的字符编码可能不同。