【发布时间】:2016-04-30 13:04:43
【问题描述】:
我正在用 C++ 编写密码管理器(仅用于教育目的!)。要生成主密钥,我的程序将运行 之前通过密码散列函数argon2输入的主密码生成主密钥。我有 1 个问题。我需要一种方法来生成用于该哈希函数的盐。根据我之前的研究(Google 搜索:“generate salt c++”和搜索 StackOverflow),我看到人们做各种类似的事情:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
static const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
char genRandom() // Random string generator function.
{
return alphanum[rand() % stringLength];
}
int main()
{
srand(time(0));
for(int z=0; z < 21; z++)
{
cout << genRandom();
}
return 0;
}
我的问题是:使用 rand() 生成随机字符串是否足够,或者是否有更接受的生成盐的方法,或者可以为我做的库?
P.S 当我搜索 StackOverflow 时,我真的只能找到关于 PHP 和 C# 的文章。
【问题讨论】:
-
我想你可能误解了我的问题。我并不怀疑 rand() 的随机性。我在问是否有更多人使用和信任的更知名的方法。 (例如加密库的某些组件)
-
只是为了补充我的问题,我已经在 python 中成功编程,并使用 os.urandom(n) 生成盐,但是 a) python 有点太慢,b)关于 python 如何管理字符串的一些事情告诉我我不应该用它来管理密码。免责声明:这只是我的意见,我不想引发一场激烈的战争
-
你应该怀疑
rand()的随机性;太可怕了。
标签: c++ key salt password-hash