如何使用 PDO 以安全的方式显示和隐藏密码

Posted

技术标签:

【中文标题】如何使用 PDO 以安全的方式显示和隐藏密码【英文标题】:How to show and hide a password in a secure way using PDO 【发布时间】:2022-01-09 07:05:43 【问题描述】:

美好的一天,

我想显示存储在 SQL-Server 中的密码,并在单击按钮后显示。 单击按钮时,必须使用 PDO 发出请求。通过存储在 SQL Server 中加密的密码并在用户单击后解密密码,我将如何以安全的方式执行此操作?

添加一个按钮来编辑此输入字段,这样用户可以在具有所需权限的情况下更新此密码。

我将添加步骤以对查看密码的人进行审核。

例如

<!DOCTYPE html>
<html>
<head>
        <title>Change Input Text Value OnClick Event</title>
</head>
<body>
<input type="text" id="my_field" value="***********">
<button onclick="change()">Show Password</button>
<script>
function change()
    var txt = "My Password"; // get this value using php, what would the best way be toencrypt and decrypt passwords
    document.getElementById("my_field").value = txt;

</script>
</body>
</html>

password_verify 示例

// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $hash)) 
    echo 'Password is valid!';
 else 
    echo 'Invalid password.';

【问题讨论】:

如果密码以安全方式存储(即:散列),那么您只能依靠客户端代码和浏览器来自动填充密码。从那时起,将表单元素 type 属性从 password 更改为 text? 密码可以使用单向哈希算法安全地存储在数据库中,您可以使用:password_hash()。要验证密码,请使用:password_verify()。 因为我希望用户能够存储密码,然后能够返回并查看密码,因为这里是 password_verify 的示例,此函数仅在以下情况下返回 true 或 false我是对的。在描述中添加了代码 sn-p 如果我没有提到OWASP's password storage 的建议,那我就失职了,特别是在密码存储的上下文中,加密应该只在需要获取原始文件的边缘情况下使用明文密码。曾经甚至有一个专门针对“明文违规者”的网站(不会链接到它),人们会公开羞辱以明文形式存储密码的网站。 【参考方案1】:

我找到了我正在寻找的东西。

很遗憾无法使用密码散列方法,所以我需要使用“openssl_encrypt()”创建我的加密和解密函数,并从 geeksforgeeks.com 找到这篇文章并解释了该过程。

然后我将在 SQL 和 PHP 之间进行修改和加密,以使其按我想要的方式工作。

链接:https://www.geeksforgeeks.org/how-to-encrypt-and-decrypt-a-php-string/

示例代码

<?php

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

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

// Store the cipher method
$ciphering = "AES-128-CTR";

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

// Non-NULL Initialization Vector for encryption
$encryption_iv = '1234567891011121';

// Store the encryption key
$encryption_key = "GeeksforGeeks";

// Use openssl_encrypt() function to encrypt the data
$encryption = openssl_encrypt($simple_string, $ciphering,
            $encryption_key, $options, $encryption_iv);

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

// Non-NULL Initialization Vector for decryption
$decryption_iv = '1234567891011121';

// Store the decryption key
$decryption_key = "GeeksforGeeks";

// Use openssl_decrypt() function to decrypt the data
$decryption=openssl_decrypt ($encryption, $ciphering,
        $decryption_key, $options, $decryption_iv);

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

?>

【讨论】:

以上是关于如何使用 PDO 以安全的方式显示和隐藏密码的主要内容,如果未能解决你的问题,请参考以下文章

毕设题目:Matlab图像隐写

如何在 PDO 中使用密码散列来使我的代码更安全? [关闭]

如何以编程方式显示/隐藏导航抽屉

SpringMVC使用隐式jdbc连接信息

通过本机反应传递复选框值以显示/隐藏密码

[VBA] 如何 隐藏 Excel 主窗口