我想比较两个字符串:
“密码”
"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));
}
最佳答案
你的线路:
return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data));
返回一个大写十六进制字符串,其中您要比较的字符串具有小写十六进制字符。将“X”更改为“x”或使用 equalsIgnoreCase() 进行比较。
关于android - 将字符串与 SHA-256 语句进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887118/