正如标题所述,我想用C函数crypt(3)实现一个简单的Sha512加密。
我几乎抄袭了GNU的例子,尽管我知道盐的计算不是很好。另外,我将$1$改为$6$,因为密码的管理说明这将创建一个SHA512哈希。
无论如何,输出对我来说似乎很奇怪,所以我在问我的代码是否有什么问题:
这是一个基本的功能:
static char* hashStr(char *str) {
unsigned long seed[2];
char salt[] = "$6$........";
const char *const seedchars =
"./0123456789ABCDEFGHIJKLMNOPQRST"
"UVWXYZabcdefghijklmnopqrstuvwxyz";
seed[0] = time(NULL);
seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);
// Turn it into printable characters from `seedchars'.
for (int i = 0; i < 8; i++) {
salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];
}
return crypt(str, salt);
}以下是一些输出:
Bro -> $6$9AcWGmwG$5faOmA7QpXQ/MMmbFAT085HraONeaMYlTcBg09WmQUpSI.PkcrcDQiXCetyjuIK3sr3H5cIFyxHD.fywr9UfY/
Homie -> $6$BAcWGnwG$KUPLOdpa8QgF.cVljBXYl62lL9zejDW/ZWENUoC90jO4NinNc1Itk7Z1Zo3myogmHR/YPwoc2cqfjBL0cf.Ht0
hey -> $6$IAcWGowG$47WGhO6Hco9DOc0rnxu/KEttLvjv4wH6vJX8qj6hALr0Wa1/YQb0JETEcRgpe9.cPvwOBjQduLZn17gwSXM86. 是什么让我怀疑产出是否合法?尤其是在每次开始的时候都有这个&6。
发布于 2013-11-18 22:43:50
如您所见,这里 crypt(3)返回:
$id$salt$encrypted这就是为什么你得到了$6$8chars$...
https://stackoverflow.com/questions/20058656
复制相似问题