[英]MD5 Hashing returning different output than expected
我正在使用JDBC連接燈,並且在MySQL數據庫中使用MD5哈希了單詞LondonWeight作為密碼。 然后,我需要對照集合(即LondonWeight)檢查輸入的密碼,以檢查它們是否匹配。 但是,我的Java代碼中的哈希返回該單詞的不同輸出。
MySQL哈希:1274d1c52d7a5a9125bd64f1f9a26dce
Java哈希:132310771724320562704545645352563257040366
這是我的哈希碼:
private String hashPass(String pass) throws NoSuchAlgorithmException {
MessageDigest mdEnc = MessageDigest.getInstance("MD5");
mdEnc.update(pass.getBytes(), 0, pass.length());
String md5 = new BigInteger(1, mdEnc.digest()).toString(8); // Encrypted
return md5;
}
當我將其打印到終端時,它肯定會散列在文本框中輸入的字符串,以便我檢查。 知道為什么它會給出不同的輸出嗎? 我了解有其他方法可以散列字節或其他內容嗎?
您目前正在使用Java將哈希轉換為八進制,而將MySQL版本轉換為十六進制。
這是第一個問題,但是:
BigInteger
將字節數組轉換為十六進制。 那不是它的目的。 使用Apache Commons Codec或專為十六進制轉換而設計的東西。 例如,這樣,您將獲得BigInteger
可能會抑制的適當的前導零 String.getBytes
指定編碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.