【发布时间】:2019-03-23 20:23:24
【问题描述】:
因为一个类似的问题,被认为是题外话......我已经改变了我的问题(毫无疑问地符合网站规则),沿着 stackoverflow 本身的几个热门问题(在底部给出)。
操作系统:CentOS (GCC) 场景:在线密码管理 Pref: OpenBSD 实现
我正在尝试使用 bcrypt(使用 which is final)。但似乎找不到可靠和正确的方法,包括生成哈希、覆盖内存和存储它们。
我已经看到关于 stackoverflow(和 security.stackex)的热门问题已标记为 bcrypt,到目前为止,我还没有没有看到正确方法的组合示例。我收集到的:
- 50(安全)和 72(扩展)字符密码是 bcrypt 的上限
- Binary(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?
【问题讨论】:
标签: c security hash cryptography bcrypt