如何在C语言中创建一个变量盐用于crypt函数?

3
作为一项任务,我需要从一个密码的哈希值(使用crypt生成)开始查找用户的密码。因此,我正在尝试创建一个变量salt(2个字母的字符串),然后计划在crypt函数中使用它,直到结果与哈希值匹配。然而,当我尝试制作这个变量salt时,我得到了5/6个字符,即使我将salt定义为大小为2的数组。有人知道如何解决这个问题吗?我知道这是一个困难的解释,但请查看下面的代码(和结果)。
char salt[2];
for (int i = 65; i < 91; i++)
{
    salt[0] = i;
    for (int j = 65; j < 91; j++)
    {
        salt[1] = j;
        printf("%s\n", salt);
    }
}

结果: AA �g AB �g AC �g AD �g AE �g AF �g ... ... ... ZW �g ZX �g ZY �g ZZ �g

这些额外的字符(=�g)是从哪里来的?

谢谢

1个回答

1
您正在尝试将salt作为字符串打印,但实际上您没有一个字符串。您有一个由两个字符组成的数组。字符串以空字节终止。通过将此数组传递给printf,它会尝试读取超出数组末尾的位置,寻找值为0的字节。读取超出数组末尾的位置会引发未定义行为,在这种情况下表现为打印额外的字符。

您需要在数组中添加用于空终止符的空间:

char salt[3];
salt[2] = 0;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接