Php 如何显示哈希密码

Php 如何显示哈希密码,php,hash,passwords,Php,Hash,Passwords,我已经成功地散列了用户在我的网站上注册的密码,通过使用密码验证功能,我可以对照散列的密码检查他们的原始密码,并允许他们登录。但是在他们的“我的帐户”页面上,我想让他们看到他们的原始密码,但它会在他们的“我的帐户”页面中显示哈希密码。是否有一个函数可以将哈希密码转换为“我的帐户”页面上的原始密码 我已经成功地散列了用户在我的网站上注册的密码,并使用密码验证功能 好,那你问吧 我想让他们看到他们的原始密码,但它会在他们的“我的帐户”页面中显示哈希密码。是否有一个函数可以将哈希密码转换为“我的帐户”页

我已经成功地散列了用户在我的网站上注册的密码,通过使用密码验证功能,我可以对照散列的密码检查他们的原始密码,并允许他们登录。但是在他们的“我的帐户”页面上,我想让他们看到他们的原始密码,但它会在他们的“我的帐户”页面中显示哈希密码。是否有一个函数可以将哈希密码转换为“我的帐户”页面上的原始密码

我已经成功地散列了用户在我的网站上注册的密码,并使用密码验证功能

好,那你问吧

我想让他们看到他们的原始密码,但它会在他们的“我的帐户”页面中显示哈希密码。是否有一个函数可以将哈希密码转换为“我的帐户”页面上的原始密码

不,你不能那样做,否则它会毁掉散列的全部目的


换句话说,用户不能更新他们的密码,对吗?因为我也有一个更新信息页面


为了能够更新密码,他们不需要查看它,只需要知道它。

通常无法检索哈希密码(这取决于哈希函数,无法检索安全哈希)。如果他们在两个站点上有相同的散列,他们可能有相同的密码,这取决于站点使用的散列盐、什么方法等。

无法获取散列密码。如果希望用户通过确认旧密码来更新密码,请将旧密码与新密码一起作为输入项,并将其哈希值与数据库中存储的值进行比较。如果旧密码的哈希值与数据库中的哈希值相同,则允许用户更新密码。否则,请注意旧密码是错误的,并且是单向的,可能是您正在使用的密码之一(只是猜测)。如果您需要双向,您可以简单地使用和

但是,我不建议您向用户显示密码:-

对于更改密码:您可以简单地要求用户输入其旧密码和新密码,对其进行加密并与存储数据库中的加密密码匹配,如果它们匹配,则为相应用户更新数据库中的新加密密码


对于忘记密码:您可以为该特定用户生成一个令牌,并将其与链接(重置密码)一起作为参数发送到他们所需的电子邮件地址,当他们使用该链接时,您将获得令牌以验证并在数据库中存储新的加密密码。

如果您希望通过管理面板查看密码,您不需要对密码进行哈希运算。只需使用openssl_encypt()函数加密密码,然后使用openssl_decypt()函数查看密码

//您可以使用以下代码

<?php 

// Store a string into the variable which 
// need to be Encrypted 
$simple_string = "Welcome to Sidedevelopers"; 

// Display the original string 
echo "Original String: " . $simple_string . "\n"; 

// Store cipher method 
$ciphering = "BF-CBC"; 

// Use OpenSSl encryption method 
$iv_length = openssl_cipher_iv_length($ciphering); 
$options = 0; 

// Use random_bytes() function which gives 
// randomly 16 digit values 
$encryption_iv = random_bytes($iv_length); 

// Alternatively, we can use any 16 digit 
// characters or numeric for iv 
$encryption_key = openssl_digest(php_uname(), 'MD5', TRUE); 

// Encryption of string process starts 
$encryption = openssl_encrypt($simple_string, $ciphering, 
        $encryption_key, $options, $encryption_iv); 

// Display the encrypted string 
echo "Encrypted String: " . $encryption . "\n"; 

// Decryption of string process starts 
// Used random_bytes() which gives randomly 
// 16 digit values 
$decryption_iv = random_bytes($iv_length); 

// Store the decryption key 
$decryption_key = openssl_digest(php_uname(), 'MD5', TRUE); 

// Descrypt the string 
$decryption = openssl_decrypt ($encryption, $ciphering, 
            $decryption_key, $options, $encryption_iv); 

// Display the decrypted string 
echo "Decrypted String: " . $decryption; 

?> 

输出:

原始字符串:欢迎使用Sidedevelopers

加密字符串:hwB1K5NkfcIzkLTWQeQfHLNg5FlyX3PNUA==


解密字符串:欢迎来到Sidedevelopers

如果您需要显示原始密码,那么为什么要进行哈希?加密密码无法显示。换句话说,用户无法更新密码,对吗?因为我也有一个更新信息页面。这也是错误的,用户可以很容易地更新他们的密码。只需询问他们的旧密码,然后验证密码,然后询问新密码及其更新。好的,我的问题是,在我的更新信息页面中,在密码字段中,我看到一个长长的******点,这是散列密码,而我想看到用户拥有的原始密码,但可能想要更新。那么为什么要显示这些点呢?保持该字段为空。询问他们旧密码新密码确认新密码然后匹配。你为什么要给他们看他们的旧密码?他们知道这就是他们登录的方式你知道吗?你的权利。当我在任何网站上知道我的原始密码时,如果我想更改它,我想不起会显示我的原始密码。谢谢。但是如果你想让用户更新密码呢?那么我是否应该忘记此功能?如果希望用户通过确认旧密码来更新密码,请将旧密码与新密码一起作为输入项,并将其哈希值与存储在数据库中的值进行比较。如果旧密码的哈希值与数据库中的哈希值相同,则允许用户更新密码。否则,请注意旧密码错误