正如标题所说,我想用C函数crypt(3)实现一个简单的Sha512加密。
我几乎从GNU复制了示例代码,尽管我知道salt计算不是很好。此外,我将$ 1 $更改为$ 6 $,因为crypt的联机帮助页说这将创建一个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.
是什么让我怀疑输出是否合法,尤其是这个&amp; 6&amp;每次都在开始。