我想比较两个字符串:
"password"
"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
(相同但在SHA-256中)。通常,函数isPassValid()
会返回true
,但我有一个false
响应。为什么?
这是我的代码:
public static boolean isPassValid(){
String hash = bin2hex(getHash("password"));
return hash.equals("5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8");
}
private static byte[] getHash(String password) {
MessageDigest digest=null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
assert digest != null;
digest.reset();
return digest.digest(password.getBytes());
}
private static String bin2hex(byte[] data) {
return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data));
}
答案 0 :(得分:5)
你的专栏:
return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data));
返回一个大写十六进制字符串,其中您要比较的字符串具有小写十六进制字符。将“X”更改为“x”或与equalsIgnoreCase()进行比较。