解密散列由php中的md5函数传递,以在编辑表单中显示原始密码

时间:2018-02-14 07:19:10

标签: php cakephp-3.x

$customer->password = md5($this->request->data['password']);

数据库中的结果值是

edd37150ae53ddd72974a8b115a3b78e.

但是当我在编辑表单中调用密码时 echo $this->Form->input('password');  它以散列格式显示密码。你能告诉我如何在输入栏中获得原始密码。

3 个答案:

答案 0 :(得分:4)

简短回答你不能 中等答案即使你可以,也不应该

长答案
Hash是一条单向道路,您无法取回您所输入的输入。 (我不会提到暴力)

除此之外,您不应该向您的用户显示旧密码,无论如何,甚至不是为了“忘记密码”。这是一个重大的安全漏洞。 如果用户想要更改/重置/编辑他们的密码,只需让他们拥有密码并将其存储在数据库中,而无需担心旧密码。

并且,另一个重要注意事项:请使用password_hash()哈希密码md5不是为密码而设计的,因为它存在冲突和其他严重问题。

答案 1 :(得分:0)

MD5的定义是单向散列算法。你可以暴力攻击它(已知可行)。但对于一个网站并预先填写了正确值的密码框,没有可行的解决方案。

我的猜测是你要避免用户必须一直输入hist密码。或者确保在提交表单时不会更改密码。

选项包括:

  • 将密码字段留空 - 如果提交表单是为了让我们说一个配置文件更改,请检查一个空字段并保持密码不变。
  • 不显示密码字段,除非您确实想要再次执行需要密码的事务,然后让用户输入密码。其他任何事情都是违反安全规定的。

答案 2 :(得分:0)

这里我有一个解决方案,我在我的应用程序中实现的是添加一个列,只需将密码转换为加密格式,使用任何哈希算法,如附加并保存在数据库中。

原始密码为1列,第二列为编辑操作。

default_column:密码

第二栏:encrypt_password

public static function decrypt($ string){

    $output = false;
    $encrypt_method = "AES-256-CBC";
    $secret_key =  'hafizGAmirGWasimG';
    $secret_iv = '@@_hJ%5Xkm48HU7eWem&gbPRm+=qs8bw';
    $key = hash('sha256', $secret_key);
    $iv = substr(hash('sha256', $secret_iv), 0, 16);
    $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
    return $output;

}

public static function encrypt($string){
    $output = false;
    $encrypt_method = "AES-256-CBC";
    $secret_key = 'hafizGAmirGWasimG';
    $secret_iv = '@@_hJ%5Xkm48HU7eWem&gbPRm+=qs8bw';
    $key = hash('sha256', $secret_key);
    $iv = substr(hash('sha256', $secret_iv), 0, 16);
    $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
    return base64_encode($output);
}

然后当您需要更新密码时,只需选择该encrypt_password然后通过该功能进行解密并更新,然后使用该加密方法进行存储,并使用md5方法更新原始密码字段。

另外,最好的方法是在编辑时不要在密码中显示密码只要输入密码如果你想更新,如果没有,那么只需将它们留空,然后再做一个if else更新或者不

if($ request-> password)然后 否则不会更新。