【问题标题】:What is the best way to encrypt a text file in C/C++?在 C/C++ 中加密文本文件的最佳方法是什么?
【发布时间】:2010-11-06 08:02:26
【问题描述】:

只要用户登录,基于 C/C++ 的 cgi Web 应用程序就会在服务器上创建一个临时文本文件。当用户注销时,该文本文件将被删除。我想加密这个文本文件以及文件的内容。该文件将包含用户名和密码等信息。

最好的方法是什么?

编辑:我看到有人建议使用库。我的问题是除了标准 C++ 库我什么都不能使用。

【问题讨论】:

标签: security encryption


【解决方案1】:

使用知名库(例如 openssl)并遵循知名的 examples 并远离特定于平台的解决方案。

【讨论】:

    【解决方案2】:

    我认为您可能会以错误的方式处理此问题。如果安全,真正的安全是目标,那么即使是加密形式,您也不会想要存储密码(因为如果密钥被盗,它可以被解密,正如其他人所说)。

    您应该做的是存储密码的哈希值(使用适当的盐)。这意味着没有人(甚至网站管理员)可以确定用户的密码。他们只能接受一个密码,并通过使用相同的盐对输入进行散列来查看它是否正确(你不能反转散列)。

    另外,这种情况很适合数据库,你在用吗?

    Google 使用盐的密码散列,您可以从真正的安全专家那里了解它(我不是)。

    【讨论】:

      【解决方案3】:

      目前被认为“安全”的加密标准是 AES(也称为 Rijndael)。您可以在 Codeproject 和许多其他地方找到 C++ 实现。

      请注意,当使用 AES 或任何其他对称加密标准时,您必须将加密/解密密钥存储在您的应用程序中。如果有人发现了密钥,他可以解密您使用此密钥加密的所有文件。

      如果您的应用程序将在 Windows 下运行,您还可以使用DPAPI 来存储加密信息。

      【讨论】:

      • 一个好主意是程序化地生成密钥,这样 REing 会变得更难。 RAM 转储仍然是可能的,因此将密钥保持为非顺序格式是一个优点。
      • "请注意,当使用 AES 或任何其他对称加密标准时,您必须将加密/解密密钥存储在您的应用程序中。如果有人发现了密钥,他可以解密您使用加密的所有文件这把钥匙。”这正是您/不能/将原始密钥存储在应用程序的可执行文件中的原因。密钥应受密码或类似的保护。
      【解决方案4】:

      修改后的答案。
      您希望代码加密和解密可与您的 C++ 代码一起使用的文件。
      编写自己的代码 (like this one) 是绝对不正确的。

      但是,你说你不能使用标准库。
      标准(也可能是开源)库可能是在应用程序中实现加密的最正确方法。如果您选择不这样做,那么您只有两个选择,

      • 实施您自己的标准加密算法版本(并可能因您犯的任何错误而导致漏洞)
      • 使用来自您的应用程序的“系统”调用并运行可能(希望)在您的系统上可用的标准加密(如 bcrypt)。

      我仍然会坚持选择标准库或将这样的开源代码集成到我的应用程序中。请解释是什么阻止你这样做。


      旧:出于某种原因,我认为需要 PHP 代码...我的错误。
      本文给出a PHP encryption symmetric program example using crypt将密码存储在文本文件中。

      可能相关的 Stackoverflow 问题

      【讨论】:

      • 他正在使用 C++。我不认为 PHP 脚本是相关的。
      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 2010-09-13
      • 2010-09-18
      • 2012-07-30
      相关资源
      最近更新 更多