c++ - 加密存储密码

标签 c++ encryption

我正在用 C++ 编写一个小工具,但我对如何将加密密码存储在文本文件中感到困惑。 我在网上搜索过。关于哈希的流行建议是:

"The basic concept is that you take the password, use it to compute its hash, and then store that hash. Later, when the user enters the password to log in, you compute its hash again and compare the resulting hash to the stored hash."

但是,我需要将密码解密为纯文本。我应该怎么办? 请提供任何建议。

最佳答案

在您描述的情况下,散列密码不适用。由于您确实需要 SMTP 服务器的明文密码,因此您别无选择,只能以加密方式存储。

也就是说,我真的希望您使用 SSL 连接到您的 SMTP 服务器,否则您根本不必担心加密,因为密码会在网络上被盗(比在您的本地计算机上更有可能)。

加密密码以便恢复的问题在于,如果您的程序能够在没有用户干预的情况下执行此操作,那么解密 key 必须存储在可执行文件(或数据文件)中,因此 每个人原则上都可以恢复原始密码。
很容易使密码不可读以防止随意检查(例如使用十六进制编辑器时),但很难(没有用户交互:不可能)以某种方式做到这一点,因此它是不可恢复的。

如果适用的话,您不应该将加密 key 存储在程序中或任何类似的东西中,而是在启动时提示用户一次输入 key ,然后程序将在剩余的时间内将其缓存在内存中它的运行时间。一定要锁定(Unix下为mlock,Windows下为LockVirtualMemory)存放解密密码的页面,不能写入swap。

除此之外,它非常简单,您可以使用任何一种现成的算法。由于加密算法肯定不会是您的安全链中最薄弱的环节,因此您选择哪个并不重要。当然,您仍然不应刻意选择简单的异或加密等简单易破解的算法,但任何有点严肃的算法,如 TEA、Blowfish 或 Twofish,或 AES 都可以。
我可能只会选择 TEA,因为它只有六行代码,而且无论哪种方式,它都与“存储加密的明文密码”一样好。

关于c++ - 加密存储密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436615/

相关文章:

c++ - 当我使用 expect 运算符时,我会使用 spirit X3 获得更快的解析器吗

c# - c#中的数据加密和 key 管理

Python 3.6 异或文件解密

c - c编程中使用openssl使用文件IO进行三重DES加密解密

c++ - C++中的链接结构数组

c++ - 有没有办法可以使用 ofstream 保存屏幕截图?

c++ - Rcpp:无法加载共享对象, undefined symbol

c++ - 为什么当返回类型为const时可以修改返回值?

java - 如何使用已知 IV 解密 AES/CBC

android - Android 加密中的 BadPaddingException