gpt4 book ai didi

检查从 aaa..a 到 zzz..z 的每个 "word"

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:35 31 4
gpt4 key购买 nike

我的程序应该是一个暴力密码破解程序(学校作业)。输入参数如下..

./crack threads keysize target

程序需要检查长度为keysize 的密码,但也需要检查较短的密码。我不确定如何着手写一些一次只改变一个字母的东西,然后继续这样做..(keysize max 将变为 8)

例子..

keysize = 5,所以一个循环(我认为)需要修改一些等于“aaaaa”到“aaaab”到“aaaac”的东西,将每个结果连同盐(前两个target 的字符),直到找到匹配项。

我正在使用 crypt_r,因为下一步是添加多线程。

不确定是否真的需要其他任何东西来解释这个问题。很乐意澄清。

最佳答案

让我们看看。有 10^n 种可能的 n 位十进制数。因此,仅使用字母 a-z 的 8 字符密码就有 26^8 种可能。计算结果为 208,827,064,576。

您可以使用简单的 64 位计数器跟踪数字,然后将数字转换为 base-26 表示形式。像这样的东西:

long max = 208827064576;
longlong counter = 0;

while (counter < max)
{
char password[9];
GetPassword(counter, password);
// do whatever you want with the password
++counter;
}

void GetPassword(longlong count, char* pass)
{
int i;
int rem;
if (count == 0)
{
pass[0] = 'a';
pass[1] = '\0';
return;
}
i = 0;
do
{
int rem = count % 26;
pass[i] = 'a' + rem;
++i;
count /= 26;
} while (count > 0)
}

通过使用 counter 变量的互锁增量,您可以轻松地使它对多个线程可用。或者您可以拆分搜索空间,使一个线程从 0 开始,一个线程从 26^7(这将是 baaaaaaa)开始,等等。

2000 亿是一个相当大的数字。十亿秒等于接近 32 年。即使您每秒可以检查几千个(不太可能),您也需要相当长的时间来进行详尽的搜索。

关于检查从 aaa..a 到 zzz..z 的每个 "word",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018228/

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