我有一段 Java 代码可以从输入字符串生成 SHA512 哈希值。
public class SHA512Hash {
public static String encryptThis(String input) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest digest = MessageDigest.getInstance("SHA-512");
digest.update(input.getBytes());
byte[] byteData = digest.digest();
for (byte x : byteData) {
String str = Integer.toHexString(Byte.toUnsignedInt(x));
if (str.length() < 2) {
sb.append('0');
}
sb.append(str);
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
我得到一个哈希088f7c3b0079fcfdd04b68da7d9a9767abc4f4217f57530149044a424f98524c198114e77d9cf82f129a06256d25f1da2bbbb45d4af589c3de34ef9045输入74ea⁁51 6789。 但是当我使用在线计算器从相同的输入字符串创建散列时,结果是不同的。它是D9E6762DD1C8EAF6D61B3C6192FC408D4D6D5F1176D0C29169BC24E71C3F274AD27FCD5811B313D681F7E55EC02D73D499C95455B6B5BB503ACF574FBA8FFE85。 我在谷歌上搜索了一下,可能是他们对待输入的方式不同造成的。我如何调整我的 Java 代码以适应在线计算器,因为我需要检查输入与数据库中存储的输入是否相等。 非常感谢大家。
"123456789"
,我得到D9E67 ....就像计算器一样。
结论:不管你用什么方式得到123456789都是坏的。 不是你的 sha512 代码。 这里有一个简单的提示:无论你得到这个(例如,也许使用
scanner.next()
,运行
System.out.println("≤" + input + "≥");
来检查它,也许运行 System.out.println("123456789".equals(input));
- 因为那是你需要调试这段代码的地方。public class SHA512Hash {
public static void main(String[]args) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest digest = MessageDigest.getInstance("SHA-512");
digest.update("123456789".getBytes());
byte[] byteData = digest.digest();
for (byte b : byteData) {
System.out.printf("%X",b);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
版画
D9E6762DD1C8EAF6D61B3C6192FC408D4D6D5F1176D0C29169BC24E71C3F274AD27FCD5811B313D6
81F7E55EC02D73D499C95455B6B5BB503ACF574FBA8FFE85
你确定你正在获取字符串的字节吗?您需要验证您的方法参数。