-1
我使用此代碼加密密碼密碼加密
public static byte[] encrypt(String password) {
try {
BASE64Encoder be = new BASE64Encoder();
MessageDigest md = MessageDigest.getInstance("sha-512");
md.update(password.getBytes());
return md.digest();
} catch (NoSuchAlgorithmException e) {
}
return null;
}
如果我使用此代碼對口令進行比較它完美
if (encrypt(passwordField.getText()).compareTo(encrypt("password")) == 0)
system.out.print("true")
else *false
,我想,所以我使用的控制檯結果來隱藏我的密碼System.out.println(encrypt("Password"))
比較,所以我的代碼看起來像這樣
if (encrypt(passwordField.getText()).compareTo("5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5+buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/n"+
"NvwKPoX4uw==") == 0)
system.out.print("true")
else *false
它總會輸出FAL se。我不明白爲什麼。 感謝您的時間
首先SHA-512是一個不可逆的散列函數。另一方面,加密是可逆的。 –
你是如何創建「5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5 + buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/nNvwKPoX4uw ==」?它沒有有效的Base64長度,因此比SHA-512輸出長。 –
你不應該使用簡單的散列函數來保護你的用戶密碼。你需要使用像PBKDF2,bcrypt,scrypt和Argon2這樣強大的散列方案。一定要使用高成本因子/迭代次數。選擇成本是很常見的,因此一次迭代至少需要100ms。查看更多:[如何安全哈希密碼?](http://security.stackexchange.com/q/211/45523) –