【发布时间】:2018-12-21 16:43:50
【问题描述】:
基本上我有这个
if (args.length != 1) {
System.err.println("Usage: java MyMd5 <message>");
System.exit(1);
}
try {
// get message
byte[] message = args[0].getBytes("UTF8");
// create message digest object for MD5
MessageDigest messageDigest = MessageDigest.getInstance("SHA");
// System.out.println("Provider: " +
messageDigest.getProvider().getInfo();
// create message digest
messageDigest.update(message);
byte[] md = messageDigest.digest();
// print result
System.out.println("Message Digest Algorithm: MD5");
System.out.println("Message: " + new String(message));
System.out.println("Message Digest: \"" + new String(md, "UTF8") + "\"");
String HashPassword=new String(md, "UTF8");
System.out.println(HashPassword);
System.out.println(HashPassword.equals("???8p???W?B:??N?~"));
但不知何故,当我尝试比较它时返回 false。我的编码有问题吗?谢谢!
Message Digest Algorithm: MD5
Message: pass123
Message Digest: "???8p???W?B:??N?~"
???8p???W?B:??N?~
false
【问题讨论】:
-
主要问题是您在字节数组和字符串之间进行转换,在多个地方假装字节数组包含 UTF-8 编码文本,而实际上它根本不是编码文本。
-
?表示不可打印的字符,因此?不一定等于?- 在字节级别进行比较 -
"Java MD5 not woking.":您注意到这不太可能吗? Java 中的 MD5 已经存在很多年了。
标签: java hash java-security