C:用crypt实现Sha512加密(3)

时间:2013-11-18 21:49:00

标签: c encryption

正如标题所说,我想用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;每次都在开始。

1 个答案:

答案 0 :(得分:3)

正如您所见,here crypt(3)返回:

$id$salt$encrypted

这就是你得到$6$8chars$...

的原因