[英]Hash password in PHP and verify with Java (PASSWORD_BCRYPT & jBcrypt)
我有一個關於密碼哈希的問題。 我在網頁上使用此:
$pw = password_hash($_POST[password], PASSWORD_BCRYPT);
之后,我將結果存儲在數據庫中。 我想使用Java Web Service驗證密碼。 為此,我正在使用此方法:
if (BCrypt.checkpw(password, dbPwd)){
return Response.ok("ok").build();
}
dbPwd
是我存儲的那個,而password是第一種方法的純文本形式的密碼。 不幸的是,我收到以下錯誤代碼:
javax.servlet.ServletException:java.lang.IllegalArgumentException:無效的salt修訂版
我在互聯網上發現Java方法使用2y,而jBcrypt使用2a則存在“錯誤”。 我在2a上嘗試過,並且可以正常工作,但是如何解決/使其正常工作呢?
經過大量研究后,我發現了jBcrypt庫的較新實現: https : //github.com/patrickfav/bcrypt
我使用了Scala,但是概念基本相同,為了驗證$2y$
哈希,我創建了一個小實用函數:
import at.favre.lib._
/**
* Verifies an encrypted password against the expected value
*
* @link https://github.com/patrickfav/bcrypt
* @param hash The hashed password (encypted with BCrypt version $2Y$)
* @param password The unencrypted password string
*/
private def verifyBcryptHash(hash: String, password: String): Boolean = {
if (hash == null || hash.trim.isEmpty)
false
else
BCrypt
.verifyer()
.verifyStrict(
password.toCharArray(),
hash.toCharArray(),
BCrypt.Version.VERSION_2Y
)
.verified
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.