所以我正在创建一个应用程序,它可以登录到一长串 FTP 站点,检查新文件并下载它找到的任何新文件。
我使用 SQL Server 2016 SP1 来存储我已经下载的文件表,因此当我连接到 FTP 并检查该表时,我可以判断文件是否是"new"文件。
我还使用 SQL Server 来存储我的 FTP 站点列表、用户名和...密码!我的应用程序逐一循环我的 FTP 表中的每个 FTP 站点,并使用表中的凭据连接到它们。
现在我将密码存储为 plan varchars,因为我需要将它们传递到我正在使用的 FTP 应用程序中。
我想做的是将它们存储为加密数据,这样我只在要使用密码时才解密。理想情况下,我只会将解密后的密码传递到内存中的 FTP 客户端,而不会将其作为 varchar 实际写入磁盘。
我遇到的每个指南或网页都在谈论加密密码,因此您只能得到哈希值,有效地为我提供了一种方法来检查我是否拥有正确的密码,这对于使用密码运行网站或检查是否有密码非常有用用户已正确输入密码或其他内容。
我需要的是一种加密存储密码的方法,这样它就可以被我解密,这样我就可以使用它了。无论我沿着这些思路搜索什么,我总是不断返回给我散列检查的答案,而不是解密它的方法。
我想做的事可行吗?有什么意义吗?因为如果我 可以解密密码,那么肯定任何有权访问数据库的人都可以吗?或者是否有某种方法可以有效地将它们锁定为仅由某些 UserID 解密?
欢迎提出建议。
最佳答案
不确定您的应用使用的是哪种语言,但在 PHP 中,您可以使用 openssl 和 base64 方法来加密和解密服务器端。这是一个快速的 PoC:
<?php
$plaintext = 'plain text string to encrypt';
$password = 'Ir43234Ldsase445wsd4f';
$method = 'aes-256-cbc';
echo "Password:" . $password . "\n";
$key = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$ivlen = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivlen);
$encrypted = base64_encode(openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv));
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $key, OPENSSL_RAW_DATA, $iv);
echo "plaintext=" . $plaintext . "\n";
echo "cipher=" . $method . "\n";
echo "encrypted to: " . $encrypted . "\n";
echo "decrypted to: " . $decrypted . "\n";
关于sql-server - 如何最好地在 SQL Server 中存储密码以便可以检索密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59534329/