C dictionary creator [GPL]

  • Themenstarter Themenstarter P21YALPHA
  • Beginndatum Beginndatum
P

P21YALPHA

Guest
Hallo Leute,

ich suche einen GPL lizensierten brutforce dictionary creator, geschrieben in C.

Als Eingabe, soll der Zeichensatz erfolgen und die Maximallänge.
Als Ausgabe, zeilenweise die erzeugten kombinationen, alphanumerisch sortiert.

Ich suche schon lange nach SourceCode, bekomme es selber nicht gebacken.
Mir ist das ganze zu mathematisch und komplex.

Freue mich schon auf Ideen oder Source.
 
Muss das ganze wirklich in C geschrieben sein? Mit Ruby lässt sich das ganze über Ranges und String-Multiplikation recht einfach realisieren. Beispiel:

Code:
# Länge
puts "Length: "
l = Integer(gets.chomp)

range_start = "\x00"*l
range_end = "\xFF"*l

# alle Einträge vom Start bis zum Ende ausgeben
(range_star..range_end).each do |s|
  puts s
end

Den die Range lässt sich natürlich noch eingrezen indem du die Hex-Werte verändert. (Geht übrigens auch mit Zahlen und Strings)
 
Was denn nun: Dictionary oder Bruteforce?
Ich gehe mal von Bruteforce aus, da man Wörter nicht generieren kann. Man könnte das ungefähr so realisieren:
Code:
#include <iostream>

using std::cout;
using std::endl;
namespace
{
	char charset[]="0123456789\0"; //gewünschte Zeichen eingeben, \0 am ende anfügen
	const int end_len=7,start_len=7; //start und endlänge angeben
	const int c_len=strlen(charset);
	int act_len=start_len;
	char tst[end_len+1];
	char indexes[end_len];
	bool next()
	{
		int d=act_len-1;
		while(d>=0)
		{
			++indexes[d];
			if(indexes[d]>(c_len-1))
			{
				indexes[d]=0;
				tst[d]=charset[0];
				--d;
			}
			else
			{
				tst[d]=charset[indexes[d]];
				return true;
			}
		}
		return false;
	}
}
int main(int argc, char* argv[])
{
	for(;act_len<=end_len;++act_len)
	{
		for(int i=0;i<act_len;++i)
		{
			tst[i]=charset[0];
			indexes[i]=0;
		}
		tst[act_len]='\0';
		while(next())
		{
			cout << tst << endl;
		}
	}
	return 0;
}
Die Kombination steht jeweils in tst. Charset und Längen ließen sich mit ein paar Änderungen auch dynamisch einlesen o.ä.. Siehe dazu auch mein "flexibler Bruteforcer", den ich hier mal gepostet habe.
 
Das sieht gut aus danke.

Aber ich bräuchte es wie geschrieben in C. Den C++ Code versteh ich leider nicht. ^^
Ich werds mir jedoch nochmal zu Gemüte führen. Vielleicht komm ich dahinter.
 
Also ich muss schon sagen, für jemanden, der RTFM in der Signatur stehen hat bist du erstaunlich wenig bereit, selbst Leistung für Informationen zu erbringen. Du bekommst hier zwei Quelltexte geliefert und bist nicht zufrieden? Im Übrigen würde das zweite Beispiel in C auch nicht sehr anders aussehen.
 
Bis auf die Ausgabe-Funktionen ist alles in C, man muss nur "namespace" weglassen und statt bool int verwenden:
Code:
#include <stdio.h>
#include <string.h>
char charset[]="0123456789\0"; //gewünschte Zeichen eingeben, \0 am ende anfügen
const int end_len=7,start_len=7; //start und endlänge angeben
const int c_len=strlen(charset);
int act_len=start_len;
char tst[end_len+1];
char indexes[end_len];
int next()
{
	int d=act_len-1;
	while(d>=0)
	{
		++indexes[d];
		if(indexes[d]>(c_len-1))
		{
			indexes[d]=0;
			tst[d]=charset[0];
			--d;
		}
		else
		{
			tst[d]=charset[indexes[d]];
			return 1;
		}
	}
	return 0;
}
int main(int argc, char* argv[])
{
        int i;
	for(;act_len<=end_len;++act_len)
	{
		for(i=0;i<act_len;++i)
		{
			tst[i]=charset[0];
			indexes[i]=0;
		}
		tst[act_len]='\0';
		while(next())
		{
			printf(test);
		}
	}
	return 0;
}

@Jobbe: ACK, ein bisschen Eigeninitiative schadet nicht.
 
Meine Herren. Ich hab doch nicht umsonst C in der Anfrage geschrieben.

Ich danke nochmal herzlich für die C Version. Das namespace hat mich irritiert.

Leider bin ich weder Student noch Schüler und habe nicht die Zeit mir alle Programmiersprachen dieses Erdballs zu gemüte zu führen.

Jedoch nochmal, vielen herzlichen Dank für die schnelle Hilfe und die Lösung.
 
Alles schön und gut, nur mal im Ernst: die Grundzüge des Programmes sind in C und C++ identisch. Wenn dich nur namespace irritiert hat, da hilft google sehr flott weiter. Wie du so schön ein C-Programm anfragst wirkt einfach ein wenig wie "Hoppla hier bin ich und ihr tragt mir jetzt bitteschön Dinge zusammen". Wenn ich dich da falsch interpretiert habe tuts mir leid.
Sorry für OT.
 
Ich weis nicht was es damit zu interpretieren oder diskutieren gibt.
Alles steht in der Anfrage. Wer damit ein Problem hat, der lese doch bitte einen in seinen Augen "angenehmeren" Thread.

Ich bin sehr dankbar für die nicht OT antworten.


Sollte es ein Problem geben, bitte ich einen anderen Thread für diverse Grundsatzdiskussionen zu öffnen. Danke.
 
für das sehr dankbar höhrst du dich leider sehr undankbar an.... an deiner stelle würd ich mich für dein benehmen entschuldigen denn die haben auch nur versucht zu helfen =)
 
Habt ihr vll auch andere Probleme um die euch kümmern könnt?
Braucht es denn für jeden Kleinscheiss einen Moralapostel?
Wie oft muss ich noch DANKE schreiben?
 
Zurück
Oben