$customer->password = md5($this->request->data['password']);
数据库中的结果值是
edd37150ae53ddd72974a8b115a3b78e.
但是当我在编辑表单中调用密码时
echo $this->Form->input('password');
它以散列格式显示密码。你能告诉我如何在输入栏中获得原始密码。
答案 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)然后 否则不会更新。