c - 如何在 C 中创建 bcrypt 哈希并存储它们

标签 c security hash cryptography bcrypt

由于类似的问题被认为是偏离主题...我已经按照 stackoverflow 本身的几个热门问题(在底部给出)改变了我的问题(毫无疑问,以适应站点规则)。

操作系统:CentOS (GCC) 场景:在线密码管理 首选项:OpenBSD 实现

我正在尝试使用 bcrypt (使用它是最终的)。但似乎找不到可靠且正确的方法来做到这一点,包括生成哈希值、覆盖内存并存储它们。

我已经看到了 stackoverflow(和 security.stackex)上标记为 bcrypt 的热门问题,到目前为止,我还没有看到正确方法的组合示例。我收集到的内容:

  • 50(安全)和72(扩展)字符密码是bcrypt的上限
  • Binary(60) 是存储它的常见数据类型
  • 当前最小回合数约为 8,默认为 10
  • gnu libgcrypt 有 bcrypt。 (我想看一个使用它的例子)
  • 此外,我通过“#define _POSIX_C_SOURCE 200809”在脚本中使用了一些其他 POSIX 函数

老实说,将所有这些 block 放在一起有多种出错方式,而且我还看到人们如何明显渴望推荐加盐密码哈希,即使他们在其他问题中偏离了主题。

我并不是在寻求最好的方法(这可能会产生意见分歧),而是在代码方面寻求最好的方法之一。

我有一个字符串“plainpassword”,正确地以 NULL 结尾并进行了清理(请不要详细说明),其中包含用户输入的密码。

接下来怎么办?现在如何生成 bcrypt 哈希值?以及如何正确地将其与从Mysql查询到的哈希值进行比较?使用strncmp(甚至strcmp)或strcoll?

如何覆盖内存中的明文?我还需要什么吗?

我应该使用这个:https://man.openbsd.org/crypt_checkpass.3

我虚心寻求帮助。多谢。

Stackoverflow 上的类似问题:

How do I create a SHA1 hash in ruby?

Storing SHA1 hash values in MySQL

HMAC-SHA1: How to do it properly in Java?

hash function for string

A minimal hash function for C?

Password hashing, salt and storage of hashed values

最佳答案

此处记录了与 bcrypt 一起使用的 BSD 库函数。

https://man.openbsd.org/crypt_newhash.3

使用 crypt_newhash() 生成哈希值或使用 crypt_checkpass() 比较哈希值和密码。

它们是简单的函数。如果您无法让它们工作,您需要 C 教程,而不是这里的问题。

同样,比较你想要的字符串strncmp()。这些是标准且有据可查的函数。

关于c - 如何在 C 中创建 bcrypt 哈希并存储它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883960/

相关文章:

c - 错误 : expected ')' before ';' token

c++ - const void 有什么意义?

c - 您如何使输入接受 3 个参数

php - 已通过 SQL 注入(inject)攻击的登录代码示例,尽管 mysql_real_escape_string...

hash - 如何手动在 cakephp 3 中进行密码散列?

c++ - 对于由计算的 double 值组成的键,在 map 或 unordered_map 之间进行选择。

c - 是否可以更改 argv 或我是否需要创建它的调整副本?

security - 仅在第一次请求时拥有 Jsessionid 的漏洞是什么

javascript - eval 与函数构造函数

python - 无法从 Redis 的 HASH 中删除键