如何在C的crypt函数中使用可变盐?

问题描述 投票:4回答:1

作为一项任务,我必须从该密码的哈希开始(使用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�gAB�g交流电广告自动曝光自动对焦.........ZW�gZX�gZY�gZZ-g

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

谢谢

c salt cs50 crypt
1个回答
1
投票

您正在尝试将salt打印为字符串,但实际上没有字符串。您有两个字符组成的数组。字符串以空字节结尾。通过将此数组传递给printf,它尝试读取数组的末尾以寻找值为0的字节。读取数组的末尾会调用undefined behavior,在这种情况下,这表现为打印额外的字符。

您需要在数组中为空终止符添加空间:

char salt[3];
salt[2] = 0;
© www.soinside.com 2019 - 2024. All rights reserved.