如何在C中创建bcrypt哈希并将其存储

时间:2018-10-18 23:36:11

标签: c security hash cryptography bcrypt

由于有一个类似的问题,被认为是题外话...我已按照关于stackoverflow本身的几个最重要的问题(底部给出)更改了我的问题(毫无疑问地适合了现场规则)。

OS:CentOS(GCC) 方案:在线密码管理 下一篇:OpenBSD的实现

我正在尝试使用bcrypt(最终使用)。但是似乎找不到可靠且正确的方法,包括生成散列,覆盖内存并存储它们。

我已经看到了标记为bcrypt的关于stackoverflow(和security.stackex)的主要问题,到目前为止,我还没有没有看到正确的组合方法。我收集到的东西:

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

老实说,将所有这些块放在一起有多种出错方式,而且我还看到人们即使在其他问题上都偏离主题时,也强烈希望推荐加盐的密码散列。

我并不是在寻求最好的方法(这可能会导致意见分歧),而是在代码上实现它的最好方法之一。

我有一个字符串'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

1 个答案:

答案 0 :(得分:0)

此处介绍了与bcrypt配合使用的BSD库功能。

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

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

它们是简单的功能。如果您无法使他们正常工作,则需要C教程,而不是此处的问题。

类似地,比较所需的字符串strncmp()。这些是标准的且有据可查的功能。