0

我在检查encrypt->encode()encrypt->decode()给出不同结果的字符串时遇到问题。

$psss = '123456';
echo $encrypted_string = $this->encrypt->encode($psss);
OUTPUT : oOUxUQgP56AUYFe4iXWTQIGjrFhTQ8Sojandl4ZF6TB3UuigUpsGrVKOLFLl+jM1++DerX0dmrzKjyrK9XyhUQ==
  1. 上面的字符串在密码字段中保存到数据库

  2. 我提供密码以登录'123456'

  3. 现在我习惯

    $psss = '123456' echo $encrypted_string = $this->encrypt->encode($psss);

  4. 这给了我不同的结果。

  5. 如何比较 Db 字符串和第 5 步字符串?
4

2 回答 2

1

只需更换

$this->encrypt->encode($pass);

$this->encrypt->decode($pass);

您需要解码加密的密码,但您再次对其进行编码......并且要加密您的密码,您需要使用密钥,并且您需要使用相同的密钥来解码它

$key = "Some key";
$encypted = $this->encrypt->encode($pass , $key);

将此 $encypted 存储到您的 Db 并像解码一样

$this->encrypt->decode($pass , $key);

你可以检查它

$pass = $this->encrypt->encode($_REQUEST['pass']);// this change every time 
if($pass == $DB_Pass)
    echo 'Welcome user';
else
    echo 'Wrong Password';
于 2013-06-12T06:36:37.487 回答
0

您的代码使用可逆加密,可以从数据库中读取密码并对其进行解密。

一种更安全的方法是使用单向散列,例如sha1

$psss = '123456';
echo $encrypted_string = sha1($psss);

为了更安全,也可以使用盐:

$psss = '123456';
$salt = rand(0, 1000000);
echo $encrypted_string = sha1($psss . $salt);
// save both $encrypted_string and $salt to the database

并解码

$salt = 123; // load salt from database based on requested user id
$psss = $_POST['password'];
echo $encrypted_string = sha1($psss . $salt);
于 2013-06-12T06:55:22.470 回答