gpt4 book ai didi

C 中的 crypt 函数在 for 循环中破坏密码字符串

转载 作者:行者123 更新时间:2023-11-30 14:40:52 24 4
gpt4 key购买 nike

我是 C 语言新手,我一直在学习 CS50 类(class)来学习一些基础知识。我一直在尝试解决需要制作一个简单的密码破解程序的挑战,但是我遇到了一个阻止我编写函数程序的问题:每次我在 for 循环中调用 crypt 函数时,它都会以某种方式破解我的密码我正在迭代的字符串。

我尝试制作密码字符串的副本,并将其作为参数传递给 crypt;我还尝试将 crypt 调用移动到一个单独的函数中,并从循环中调用它(以及两者的组合)

#define _XOPEN_SOURCE
#include <unistd.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>

string buildLetterDictionary();

int main(int argc, string argv[])
{
if (argc == 2)
{
printf("Two arguments, starting test...\n");

char password[2];
string letters = buildLetterDictionary();
for(int i = 0; i < 5; i++)
{
password[0] = letters[i];
password[1] = '\0';
printf("Password: %s\n", password);
string hashed = crypt(password, "50");
printf("\n%i\nOriginal: %s\nHashed: %s\n", i, password, hashed);
}
return 0;
}
else
{
printf("Usage: ./crack hash");
return 1;
}
}

string buildLetterDictionary()
{
char letters[27];
for(int i = 65; i < 91; i++)
{
letters[i-65] = i;
}
letters[26] = '\0';
string letter = letters;
return letter;
}

如果我注释掉这些行:

string hashed = crypt(password, "50");
printf("\n%i\nOriginal: %s\nHashed: %s\n", i, password, hashed);

代码按预期工作,并产生输出:

A
B
C
D
E

但是,如果我保留这些行,密码第一次会打印为“A”,哈希值“50pe4e2XTIS/g”,但随后的每次都会打印为“”,哈希值“50sXZPq5euCxs”

请让我知道根本问题是什么,以便我努力解决它!感谢您提前提供的任何帮助!

最佳答案

我猜测 cs50.h 包含一些定义,例如 a type alias from char * to string教授为简单起见而给你的。

如果这是真的,那么 buildLetterDictionary() 就无法工作,因为你正在做:

char letters[27];
...
char * letter = letters;
return letter;

这意味着您正在返回局部变量的地址,一旦您离开该函数,该变量就会被销毁。

关于C 中的 crypt 函数在 for 循环中破坏密码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55315880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com