gpt4 book ai didi

暴力破解短密码 : nested for loop

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:41 26 4
gpt4 key购买 nike

我正在尝试从哈希中破解最多 4 个字母的密码。理想情况下,我可以编写 ./crack 50fkUxYHbnXGw 并返回 rofl

我的方法是使用嵌套的 for 循环。要将此应用于不同长度的字符串,我被建议在 C 中使用空终止符,但现在我已经尝试了每个可能长度的 if 语句。

你知道更优雅的方法吗?

最后,我有一个没有给我任何输出的错误。

#define _XOPEN_SOURCE // for crypt
#include <cs50.h> // used for get_string
#include <stdio.h> // used for printf
#include <string.h> // used for strlen
#include <ctype.h> // used for isalpha
#include <stdlib.h> // for atoi
#include <crypt.h> // for crypt

int main(int argc, char* argv[])
{
// accept only two arguments from command line
// hash is max 13 characters. First two are the salt.
// next 11 are the key
if (argc != 2)
{
printf("Usage: ./crack hash \n");
return 1;
}

// make second command line argument into string
char* hash = argv[1];
char* salt = argv[1];

strncpy(salt, hash, 2);
salt[2] = 0; // null terminates destination

char* key = hash + 2; // just key without salt

char* abAB = "abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM";

for (int i = 0, n = strlen(abAB); i < n; i++)
{ //check for every length
char tri1[1] = {abAB[i]};
// produce my own encrpyted key with salt
char* cr1 = crypt(tri1, salt);
// if own key is equal to key provided, print out the string tried.
int comp1 = strcmp(cr1, key);

if (comp1 == 0)
{
printf("%s", tri1);
}

for (int j = 0, m = strlen(abAB); j < m; j++)
{
char tri2[2] = {abAB[i],abAB[j]};
char* cr2 = crypt(tri2, salt);
int comp2 = strcmp(cr2, key);
if (comp2 == 0)
{
printf("%s", tri2);
}

for (int k = 0, p = strlen(abAB); k < p; k++)
{
char tri3[3] = {abAB[i],abAB[j],abAB[k]};
char* cr3 = crypt(tri3, salt);
int comp3 = strcmp(cr3, key);
if (comp3 == 0)
{
printf("%s", tri3);
}

for (int l = 0, q = strlen(abAB); l < q; l++)
{
char tri4[4] = {abAB[i],abAB[j],abAB[k],abAB[l]};
// produce my own encrpyted key with salt
char* cr4 = crypt(tri4, salt);
// if own key is equal to key provided, print out the string tried.
int comp4 = strcmp(cr4, key);
if (comp4 == 0)
{
printf("%s", tri4);
}
}
}
}
}
printf("\n");
return 0;
}

最佳答案

这就是我最后为那些感兴趣的人所做的。我仍然不确定如何以更少的重复来改变字符串的长度。

#define _XOPEN_SOURCE // for crypt
#include <cs50.h> // used for get_string
#include <stdio.h> // used for printf
#include <string.h> // used for strlen
#include <ctype.h> // used for isalpha
#include <stdlib.h> // for atoi
#include <crypt.h> // for crypt

int main(int argc, char* argv[])
{

// accept only two arguments from command line
// hash is max 13 characters. First two elements are the salt,
// the other 11 are the key

if (argc != 2)
{
printf("Usage: ./crack hash \n");
return 1;
}

// make second command line argument into string
char* hash = argv[1];
char salt[3];
strncpy(salt, hash, 2);
salt[2] = '\0'; // null terminates destination

char* key = hash + 2; // just key without salt

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

char* abAB = "abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM";

for (int i = 0, n = strlen(abAB); i < n; i++)
{
//check for every length
char tri1[2] = {abAB[i], 0};

// produce my own encrpyted key with salt
char* cr1 = crypt(tri1, salt);

// if own key is equal to key provided, print out the string tried.
if (strcmp(cr1, hash) == 0)
{
printf("%s\n", tri1);
return 0;
}

for (int j = 0, m = strlen(abAB); j < m; j++)
{
char tri2[3] = {abAB[i], abAB[j], 0};
char* cr2 = crypt(tri2, salt);

if (strcmp(cr2, hash) == 0)
{
printf("%s\n", tri2);
return 0;
}

// this didn't work - do you know why???
// int comp2 = strcmp(cr2, hash);
// if (comp2 == 0)
// {
// printf("%s", tri2);
// printf("test");
// return 0;
// }

for (int k = 0, p = strlen(abAB); k < p; k++)
{
char tri3[4] = {abAB[i],abAB[j],abAB[k], 0};
char* cr3 = crypt(tri3, salt);

if (strcmp(cr3, hash) == 0)
{
printf("%s\n", tri3);
return 0;
}

for (int l = 0, q = strlen(abAB); l < q; l++)
{
char tri4[5] = {abAB[i],abAB[j],abAB[k],abAB[l], 0};
// produce my own encrpyted key with salt
char* cr4 = crypt(tri4, salt);

// if own key is equal to key provided, print out the string tried.
if (strcmp(cr4, hash) == 0)
{
printf("%s\n", tri4);
return 0;
}
}
}
}
}

printf("\n");
return 1;
}

关于暴力破解短密码 : nested for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46225918/

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