【发布时间】:2017-10-23 05:13:24
【问题描述】:
我想要得到的是
- 用 libsodium 加密密码 + 盐
- 将其存储到数据库中
- 读取并解密(取回纯密码进行身份验证)
我得到了我想用来加密/解密我的密码的盐的列表。 当我加密密码时,我得到一个哈希值,这样一个似乎可以工作,但在解密时我总是得到 false 作为返回值。
我是否使用了错误的方法来使用 libsodium 进行加密/解密,还是我完全走错了方向?
我的加密/解密来源:
function encrypt_libsodium($to_encrypt, $salt_to_use){
if(!$data || !$salt_to_use){
return null;
}
//get stored salt
$this->key_ = substr(md5($this->pw_key[$salt_to_use].'_'), 0, $this->ks);
//some libsodium specific stuff
$out_len = \Sodium\CRYPTO_SIGN_SEEDBYTES;
$ops_limit = \Sodium\CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE;
$mem_limit =\Sodium\CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE;
//create hash using libsodium
$hash = \Sodium\crypto_pwhash($out_len, $to_encrypt, $this->key_,$ops_limit, $mem_limit);
return $hash;
}
function decrypt_libsodium($hash, $salt_to_use){
if(!$hash || !$what){
return null;
}
//get stored salt
$this->key_ = substr(md5($this->pw_key[$salt_to_use].'_'), 0, $this->ks);
//get verification hash
$decrypted = \Sodium\crypto_pwhash_scryptsalsa208sha256_str_verify($this->key_, $hash);
return $decrypted;
}
感谢您的帮助!
问候多姆
【问题讨论】:
-
HASH 不(假定)是可逆的,所以您所能做的就是以相同的方式对纯文本密码进行哈希处理并比较 HASH
-
那么解释一下为什么需要能够转换为明文进行身份验证?
-
我有一个密码来进行身份验证,并希望将其加密存储在我的本地数据库中,但我需要它来进行身份验证。
-
你的“本地加密数据库”就像 KeePassX 一样?
-
不,我的数据库是一个简单的 mysql 数据库。我的意思是将我的加密密码存储到本地数据库。
标签: php hash passwords salt libsodium