c - 在本地安全地存储密码

标签 c security hash passwords

我正在用 C 编写一个程序,允许用户注册和登录。当用户注册时,我想将他的用户名和密码保存在一个文件中。

据我所知,最好的方法是在密码末尾添加一个随机盐,然后存储加盐密码的安全哈希值(例如 SHA-1)。

我的问题是:如果我在本地将用户名、散列和盐存储在文本文件中,是什么阻止了攻击者仅将文件中的散列和盐更改为他自己的 SHA-1 散列和他自己的盐,然后使用他的登录新密码?
谢谢。

最佳答案

这取决于攻击者是否只能访问此密码文件,或者他是否也可以访问可执行文件。在后一种情况下,您只能使交换哈希变得更加困难,但不能完全阻止它。

对于第一种情况,on 可以使用 HMAC验证存储的散列:

  1. 然后您的应用程序将包含一个 secret 的强 key ,并将使用该 key 计算散列的 HMAC。
  2. 此 HMAC 可以与文件中的密码哈希一起存储。
  3. 在读取哈希进行验证时,软件会再次计算HMAC,并与存储的进行比较。

只要攻击者不知道您应用程序中的 key ,他就无法为自己的哈希生成正确的 HMAC。所以我们得到的是,密码文件不能被你的应用程序更改,安全性集中在你的应用程序的 key 中。同样可以通过加密/解密密码文件来实现。

附言请不要使用 SHA- 来存储密码,而是使用具有成本因子的哈希函数,如 BCrypt、PBKDF2 或 SCrypt。*

关于c - 在本地安全地存储密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40504841/

相关文章:

c - 为什么在 C 中打印 char 类型的二维数组时会出现 UB?

php - WordPress 网站或服务器因上传大量 php 和 html 文件而遭到黑客攻击

php - 保护服务器上的一个特定文件; .htaccess 有什么好办法吗?

ruby - 使用数据库中的记录更新哈希数组,将新字段添加到每个现有哈希中

ruby - 如何递归地将作为符号的 Ruby Hashes 的键转换为 String

c - c 中的 fscanf 使用 - 值未正确保存

c++ - 如何||和 && 作品

c - 在 bash 脚本中自动引用 .h 文件

linux - Apache 领域安全吗?

c - 用 C 实现非加密哈希函数