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

标签 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.  

让我怀疑输出是否合法的原因是每次开头都有 &6&。

最佳答案

如你所见here地穴(3)返回:

$id$salt$encrypted

这就是为什么你得到 $6$8chars$...

关于C: 使用 crypt(3) 实现 Sha512 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058656/

相关文章:

javascript - 最佳速度/安全的 javascript crypt alg。对于网络?

asp.net - 在哪里存储加密 key MVC 应用程序

c - 写入 emacs 时进程有时会暂停

wordpress - 为我的 WordPress 网站强制使用 https...特定子域除外

ios - (总是)在使用加密来验证用户身份时向美国当局报告?

java - 什么是更便宜的哈希算法?

点击气球托盘图标

c - 全局数组问题不更新,C 编程

c - 获取一系列已排序的小写字母

c - 如何编写一个函数来搜索数组中的字符串