我需要为我的应用程序实现帐户管理,我宁愿不使用 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/