c - 是否有标准方法为 crypt 系统调用生成盐?

标签 c linux security salt crypt

我需要为我的应用程序实现帐户管理,我宁愿不使用 chpasswd 子进程,否则让明文密码超出我的应用程序的内存空间。

我想将 putspent 与我用 crypt 生成的密码散列一起使用,但我找不到任何标准函数来随机化 crypt< 的盐。在线搜索只发现奇怪的散列函数实现,我不想将其复制到我的代码中。是否有一个标准函数可以为我生成盐?

否则,重新使用存储在我的影子文件中的当前 salt 是否明智?我想不出为什么它会是一个安全隐患(它不会削弱我的影子文件以抵抗彩虹表攻击),它只是感觉不对,因为在系统安全中,经验法则总是随机化一切......(用户添加了系统实用程序)

最佳答案

这取决于你的 libc 版本。在较新的版本中有 crypt_gensalt这应该是你需要的。使用 *_rn 版本是线程安全的。

Example :

#include <crypt.h>
#include <stddef.h>
#include <stdio.h>

int main() {
    char result[CRYPT_GENSALT_OUTPUT_SIZE];
    const char* salt = crypt_gensalt_rn("$6$", 0, NULL, 0, result, sizeof(result));

    if(salt == NULL)
        return -1;

    printf("salt: %s\n", salt);

    struct crypt_data state_data = {0};
    const char* hash = crypt_rn("password", salt, &state_data, sizeof(state_data));

    printf("hash: %s\n", hash);
}

关于c - 是否有标准方法为 crypt 系统调用生成盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45478853/

相关文章:

java - 如何获取正在运行的C程序的stdin和stdout

linux - 检查当前进程是否禁用了核心转储

mysql - 授予对子网上所有机器的 mysql 访问权限

security - 如何阻止特定 IP 地址访问我的 Web 应用程序

ASP.NET 表单例份验证和持久身份验证 Cookie 安全

c - 将枚举转换为 c 中的类型的宏

c - pthread_kill 返回错误号 11

android - 如何提高android中的OpenCV人脸检测性能?

linux - Bash - 提取给定关键字的行 block

linux - 汇编程序提示用户输入不起作用