【问题标题】:C Encrypt data in file.txtC 加密file.txt中的数据
【发布时间】:2017-06-07 05:19:43
【问题描述】:

我在用 C 加密我的纯文本时遇到问题。 我能够在 C 中写入和读取文件 内文:

ID  Promo   Points  Password    Name
1   NONE    0       awdawdawd   daw

在这种情况下它只是以纯文本形式打印密码,是否可以通过任何方法加密数据,如下所示:

ID  Promo   Points  Password    Name
1   NONE    0      ENCRYPTEDDATA daw

当然密码不会是“ENCRYPTEDDATA”,我只是希望它避免用户可以轻松查看文件的纯文本。 我创建文件的原因是我需要从文件中读取它并创建一个登录功能。 我的程序本身能够在请求检查 ID 和密码时解密密码。 它可以使用任何方法,只有程序可以加密和解密数据 大佬们有什么解决办法吗? 如果可能我还需要限制加密文本

【问题讨论】:

  • 最简单的解决方案之一是使用密码文本和静态内部密钥的异或组合进行编码和解码。但是有很多更安全的算法——大多数都是现成的库(或源代码)。我尝试了google“密码加密c”,发现了一些(包括建议但不推荐的XOR encryption)。
  • 另请注意最近在 Hacker, Hack Thyself 上的 Coding Horror 博客。

标签: c encryption passwords


【解决方案1】:

您应该使用强大的哈希函数(如 SHA2)对密码进行哈希处理,并将哈希值存储在您的文件中,而不是将其存储在普通文件中

在这种情况下,散列可能比加密更好,因为对于加密,您将不得不担心将密钥安全地存储在某个地方。

当您的登录功能需要验证传入密码时,您只需对传入密码进行哈希处理并将其与您文件中的哈希密码进行匹配

【讨论】:

  • @JoesLie:虽然 Pras 的回答没有提供解密方法,但安全解决方案的逻辑是合理的……前提是保存密码的文本文件的访问权限受到严格限制。
  • 确实如此。这就是在现实世界中设计这种登录系统的方法。密码应该单向散列(使用 salt,每个用户唯一),这样如果攻击者掌握了散列,攻击者就不能仅仅解密以找出密码是什么。
【解决方案2】:

如果您想保护您的登录名,那么您应该使用密码哈希,也称为基于密码的密钥派生函数。这些函数经常,但并不总是基于安全哈希。您不应为此目的使用 SHA-2 等加密哈希。

常见的密码哈希是 PBKDF2、bcrypt、scrypt 和 Argon2。 Argon2 是密码哈希竞赛中最先进的获胜者。密码哈希在两个重要方面不同于普通哈希:

  1. 它使用关键强化技术使攻击者更难使用字典或蛮力攻击(以迭代计数或工作因子的形式,可能还有额外的内存/线程相关参数);
  2. 它使用盐 - 与密码哈希一起存储 - 以避免彩虹表攻击并避免重复的哈希值 - 这将表明正在使用相同的密码。

因此,尽管 Pras 关于不使用加密是正确的,但我不推荐使用安全哈希 ,除非您确定密码足够大且唯一。一般来说,这些限制不能也不应该在基于密码的身份验证系统上实施。

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2012-01-15
    • 1970-01-01
    • 2017-05-16
    • 2021-10-16
    • 2010-12-03
    • 2015-11-09
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多