2017-04-20 114 views
1

在爲學校做練習時,我需要使用bcrypt正確存儲密碼(散列在數據庫中)。比較它們時,該方法總是返回false。我的代碼看起來像這樣:使用salt(bcrypt)比較哈希密碼總是返回false

註冊:

String username = editTextUsername.getText().toString(); 
String password = editTextPassword.getText().toString(); 
String hashedPW = BCrypt.hashpw(password, BCrypt.gensalt()); 
User user = new User(username, hashedPW); 
user.save(); 

登錄:

String username = editTextUsername.getText().toString(); 
String enteredPassword = editTextPassword.getText().toString(); 

String hashedPW = BCrypt.hashpw(enteredPassword, BCrypt.gensalt()); 

User u = usercontroller.getUser(username); //gets user object 
String password = u.getPassword; 

BCrypt.checkpw(password, hashedPW); //always returns false 

我希望有任何BCrypt優點在那裏,可能可能幫助我。 提前謝謝!

+0

你應該從UI作爲第一個參數和第二個參數從你的商店(哈希之一)傳遞明文密碼。 – dvsakgec

+0

我不是你正在尋找的BCrypt專業人士,但我可以想象'BCrypt.gensalt()'返回一個隨機數,每次調用它時都不相同。因此,我認爲你的散列不同,因爲如果gensalt不同的結果 – 0xDEADC0DE

回答

2

CHAGE

BCrypt.checkpw(password, hashedPW); 

BCrypt.checkpw(enteredPassword, password); 

那麼它會正確評價。無論密碼是否附加了salt並生成了散列,都是如此。當使用不同的鹽進行相同密碼的哈希處理時,應根據生成的密碼進行評估,並將其評估爲true。哈希是單向算法。我們不能重新計算具有哈希的密碼,我們只能使用哈希算法比較密碼哈希。哈希是用來安全地存儲密碼