Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php md5哈希字符串到普通字符串_Php_Html - Fatal编程技术网

Php md5哈希字符串到普通字符串

Php md5哈希字符串到普通字符串,php,html,Php,Html,我已经在我的数据库中插入了我的密码 $txtPass = md5($_POST['txtPass']); 然后,我如何反转此散列并将存储的值转换为普通字符串?您不能。散列算法是一种方法。这意味着你不能“撤销”它们。您可以做的是将哈希值与它们进行比较,看看它们是否匹配 if ($hashed_value === md5('some string')) { //they match 你不能。散列算法是一种方法。这意味着你不能“撤销”它们。您可以做的是将哈希值与它们进行比较,看看它们是否匹

我已经在我的数据库中插入了我的密码

$txtPass = md5($_POST['txtPass']);

然后,我如何反转此散列并将存储的值转换为普通字符串?

您不能。散列算法是一种方法。这意味着你不能“撤销”它们。您可以做的是将哈希值与它们进行比较,看看它们是否匹配

if ($hashed_value === md5('some string')) {
    //they match

你不能。散列算法是一种方法。这意味着你不能“撤销”它们。您可以做的是将哈希值与它们进行比较,看看它们是否匹配

if ($hashed_value === md5('some string')) {
    //they match

没有PHP函数“解码”MD5哈希。如果您真的想找出散列的原始字符串,那么可以使用


这些允许您查找已知散列的原始值。但是,不能保证您能够在任何合理的时间内找到您要查找的文件。

没有PHP函数“解码”MD5哈希。如果您真的想找出散列的原始字符串,那么可以使用


这些允许您查找已知散列的原始值。但是,不能保证您能够在任何合理的时间内找到您要查找的文件。

正如其他人所提到的,哈希是(或应该是)一种单向加密方法。然而,随着的发展,存储哈希已不像以前那样安全

然而,一种稍微好一点的方法是在加密密码时使用salt。例如:

$salt = "!@#$%^&";

// registration
$password = "letmein";
$dbPassword = md5($salt . $password); // f5eb04f754cff9cd2a4acae54f84dd90

// When they go to login:
$password = $_POST['password'];
$usrPassword = md5($salt . $password);
然后,即使他们通过安全漏洞获得散列,它也总是有一个附加前缀,使得它(几乎永远)与数据库中的实际散列匹配。因此,使用该示例:

$password = $_POST['password']; // "!@#$%^&letmein"
$pwWithSalt = $salt . $password; // "!@#$%^&!@#$%^&letmein"
诚然,这是一个简单的示例(您不会让salt变得那么明显),但是您至少可以添加另一个复杂级别,这会使查找表的效率降低一点


我还应该提到的是,它具有这种内置功能,可能是比md5更好的解决方案,正如其他人所提到的,哈希是(或应该是)一种单向加密方法。然而,随着的发展,存储哈希已不像以前那样安全

然而,一种稍微好一点的方法是在加密密码时使用salt。例如:

$salt = "!@#$%^&";

// registration
$password = "letmein";
$dbPassword = md5($salt . $password); // f5eb04f754cff9cd2a4acae54f84dd90

// When they go to login:
$password = $_POST['password'];
$usrPassword = md5($salt . $password);
然后,即使他们通过安全漏洞获得散列,它也总是有一个附加前缀,使得它(几乎永远)与数据库中的实际散列匹配。因此,使用该示例:

$password = $_POST['password']; // "!@#$%^&letmein"
$pwWithSalt = $salt . $password; // "!@#$%^&!@#$%^&letmein"
诚然,这是一个简单的示例(您不会让salt变得那么明显),但是您至少可以添加另一个复杂级别,这会使查找表的效率降低一点


我还应该提到的是,它具有内置功能,可能是比md5更好的解决方案

我对您的问题做了一些轻微的修改。如果它不是你想问的,请随意还原。当然,它是一个散列,但当它只是加密的时候,不要把它看成散列。加密它,加盐,反复多次,然后我们就可以交谈了。当然你不能“取消散列”散列,散列的意义是什么?您只能比较哈希字符串的结果。您的想法是错误的。。。我们加密密码,不是为了以后解密,而是为了保护它们。如果以后需要比较输入密码是否与数据库中的加密值匹配,则需要使用相同的哈希过程,然后比较两个哈希值。如果它们匹配,您可以假定输入的密码是正确的。希望这有帮助。我对你的问题做了一些轻微的修改。如果它不是你想问的,请随意还原。当然,它是一个散列,但当它只是加密的时候,不要把它看成散列。加密它,加盐,反复多次,然后我们就可以交谈了。当然你不能“取消散列”散列,散列的意义是什么?您只能比较哈希字符串的结果。您的想法是错误的。。。我们加密密码,不是为了以后解密,而是为了保护它们。如果以后需要比较输入密码是否与数据库中的加密值匹配,则需要使用相同的哈希过程,然后比较两个哈希值。如果它们匹配,您可以假定输入的密码是正确的。希望这有帮助。好吧,也许我解决问题的办法是在我的项目更新配置文件页面中保留我的密码为空谢谢sirok,也许我解决问题的办法是在我的项目更新配置文件页面中保留我的密码为空谢谢先生