Forum » Programiranje » Generiranje kombinacij znakov
Generiranje kombinacij znakov
c0dehunter ::
Zdravo, rabim funkcijo, ki bi mi generirala takele kombinacije:
a
b
...
aa
ab
...
aaa
aab
...
... do poljubne dolžine n. Poskušal sem z for zankami in z rekurzijo, vendar se zaplete pri pogojih (npr. hočemo samo male črke in številke, oz. hočemo velike črke in posebne znake).
Obstaja že kakšna uveljavljena praksa kak to dosežit? Če je kaj važno, delam v C#.
a
b
...
aa
ab
...
aaa
aab
...
... do poljubne dolžine n. Poskušal sem z for zankami in z rekurzijo, vendar se zaplete pri pogojih (npr. hočemo samo male črke in številke, oz. hočemo velike črke in posebne znake).
Obstaja že kakšna uveljavljena praksa kak to dosežit? Če je kaj važno, delam v C#.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
WarpedGone ::
1. sestavi niz možnih znakov
2. naredi funkcijo ki iz nekega niza generira nove nize tako da k podanemu nizu dodaja po en znak iz niza možnih znakov
3. zgornjo funkcijo vpni v začetne in končne pogoje tako, da štartaš s praznim nizom, nato pa rezultat pofutraš za generiranje novih nizov
2. naredi funkcijo ki iz nekega niza generira nove nize tako da k podanemu nizu dodaja po en znak iz niza možnih znakov
3. zgornjo funkcijo vpni v začetne in končne pogoje tako, da štartaš s praznim nizom, nato pa rezultat pofutraš za generiranje novih nizov
Zbogom in hvala za vse ribe
c0dehunter ::
Aha, na tak način lahk pol naredim eno generično funkcijo, ki doda znak glede na vhodni niz. Hvala, bom poskusil!
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
Mitja Bonča ::
kako se nadaljuje?
1. a,b,c,d,e,....
2. aa, ab, ac, ad, ae,...
3. aaa, aab, aac, aad, aae...
je to pravilno?
1. a,b,c,d,e,....
2. aa, ab, ac, ad, ae,...
3. aaa, aab, aac, aad, aae...
je to pravilno?
c0dehunter ::
Recimo samo za male črke:
Vendar imam še možnosti za nabor znakov (samo male, posebni znaki, mešano,...)
a,b,c,... aa,ab,ac,... ba,bb,bc,... ca,cb,cc,... . . . aaa,aab,aac... baa,bab,bac...
Vendar imam še možnosti za nabor znakov (samo male, posebni znaki, mešano,...)
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
Spura ::
static void Main(string[] args) { List<char> ll = new List<char>(); ll.Add('a'); char[] allowedCharacters = new char[] { 'a', 'b', 'c' }; IEnumerable<string> gg = GetStringPermutations(allowedCharacters); Console.Out.WriteLine(gg.Skip(6).First()); Console.In.ReadLine(); } static IEnumerable<string> GetStringPermutations(char[] allowedCharacters) { List<char> currentString = new List<char>(); currentString.Add(allowedCharacters[0]); yield return new string(currentString.ToArray()); while (true) { if (allowedCharacters.Length == 1) { currentString.Add(allowedCharacters[0]); } else { currentString = FlipCharacters(currentString, allowedCharacters); } yield return new string(currentString.ToArray()); } } static List<char> FlipCharacters(List<char> currentString, char[] allowedCharacters) { // nekaj pomoznih spremenljivk char lastAllowed = allowedCharacters[allowedCharacters.Length - 1]; char firstAllowed = allowedCharacters[0]; // zacnemo s prvim znakom od zadaj char firstCharacter = currentString[currentString.Count - 1]; // ga spremenimo v naslednji znak firstCharacter = FindNextCharacter(firstCharacter, allowedCharacters); currentString[currentString.Count - 1] = firstCharacter; // ce imamo vec znakov in ce je prvi znak od zadaj prisel okoli if (currentString.Count > 1 && firstCharacter == firstAllowed) { // obracamo znake, dokler ne obrnemo enega, ki ni sel okoli for (int i = currentString.Count - 2; i >= 0; i--) { if (currentString[i] == lastAllowed) { currentString[i] = firstAllowed; // ce so vsi sli okoli dodamo nov znak if (i == 0) { currentString.Add(firstAllowed); } } else { currentString[i] = FindNextCharacter(currentString[i], allowedCharacters); break; } } } else if (currentString.Count == 1 && firstCharacter == firstAllowed) { // samo en znak in ta se je obrnil currentString.Add(firstAllowed); } return currentString; } static char FindNextCharacter(char c, char[] allowedCharacters) { if (c == allowedCharacters[allowedCharacters.Length - 1]) { return allowedCharacters[0]; } for (int i = 0;i < allowedCharacters.Length;i++) { if (c == allowedCharacters[i]) { return allowedCharacters[i + 1]; } } return allowedCharacters[0]; }
GetStringPermutations vrne IEnumerable, ki vsebuje neskoncno zaporedje teh nizov. Sam tok, da ne bos da kakega foreach cez.
bigbada ::
Jaz imam tudi isto nalogo. @codehunter, asistent je rekel, da moraš regenerirati nekaj takega, ne pa kot si ti napisal. Recimo vneseš niz avto
potem pa ti regenerira tak dolgo, da pride do tega vnešenega niza
aaaa
aaab
aaac
aaad
..
aaao //tu se konca ker je tista črka enaka vnešeni torej avt[o]
//potem pa gre na predzadnjo
aabo
aaco
aado
...
aato
...
abto
acto
...
avto
Če se ne motim, bi moralo biti tako ? Samo še vedno ne razumem prvega dela glede MD5 šifriranja.. @codehunter mi lahko razlozis to malce bolj.. Torej ti vneseš not poljuben niz pa pač daš "MD5 Šifriranje" in potem ti te šifrirane nize shrani v XML datoteko?
potem pa ti regenerira tak dolgo, da pride do tega vnešenega niza
aaaa
aaab
aaac
aaad
..
aaao //tu se konca ker je tista črka enaka vnešeni torej avt[o]
//potem pa gre na predzadnjo
aabo
aaco
aado
...
aato
...
abto
acto
...
avto
Če se ne motim, bi moralo biti tako ? Samo še vedno ne razumem prvega dela glede MD5 šifriranja.. @codehunter mi lahko razlozis to malce bolj.. Torej ti vneseš not poljuben niz pa pač daš "MD5 Šifriranje" in potem ti te šifrirane nize shrani v XML datoteko?
WarpedGone ::
Kake klobase...
A vas po novem plačujejo po številu natipkanih znakov?
A vas po novem plačujejo po številu natipkanih znakov?
Zbogom in hvala za vse ribe
c0dehunter ::
bigbada, če bi bla naloga tak implementirana to ne bi bil "brute force" ampak "ugani besedo" oz. črko :)
Jaz delam tako, da najprej uporabnik vnese besedo, iz katere dobim MD5. Potem pa genreiram zaporedja znakov, dobivam njihov MD5 in primerjam z MD5 prvotne besede.
Drugi del naloge je "dictionary attack", pri katerem maš v XML datoteki shranjene možna gesla in potem njihove MD5 primerjaš z MD5 prvotne besede.
Bončina, rekurzija je tipa //če še nisi prišel do max, kliči rekurz(trenutna_beseda) - le ta pa dodaja nov znak iz polja možnih znakov//.
Spura, hvala bom pogledal.
Jaz delam tako, da najprej uporabnik vnese besedo, iz katere dobim MD5. Potem pa genreiram zaporedja znakov, dobivam njihov MD5 in primerjam z MD5 prvotne besede.
Drugi del naloge je "dictionary attack", pri katerem maš v XML datoteki shranjene možna gesla in potem njihove MD5 primerjaš z MD5 prvotne besede.
Bončina, rekurzija je tipa //če še nisi prišel do max, kliči rekurz(trenutna_beseda) - le ta pa dodaja nov znak iz polja možnih znakov//.
Spura, hvala bom pogledal.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
bigbada ::
Hmm, samo a ne bi pol predolgo trajalo, da ti zgenerira tako zaporedje, če imaš recimo dolgo MD5...
Torej, če prav razumem ti vneses recimo not random niz, in potem ti ta niz pretvori v MD5.. Potem pa moraš generirati zaporedje znakov, tako dolgo da bo to zaporedje enako tistemu nizu, ki je bil pretvorjen v MD5 ali tistemu nizu nasploh?
vneses not nevem blablablabla
pa ti zasifrira v j32njn3ide0w923nijfskmfemn
potem pa moraš generirat zaporedje znakov, da dobis ven blablablabla ali j32njn3ide0w923nijfskmfemn?
blablablabla pa se ti mora shraniti v XML? al se ti MD5 shrani v xml?
Pa a ne bi prišlo potem do problema časovne zahtevnost, ker če imaš dolgo MD5 kodo potem bi rabil algoritem dolgo časa da bi to zgeneriral?
Sory k sprašujem mogoče neumnosti, samo ni mi najbolj jasno kaj moramo narediti, ker je bolj bogo razložil.. V enem izdihljaju v 30 sekundah je povedal navodila..
Torej, če prav razumem ti vneses recimo not random niz, in potem ti ta niz pretvori v MD5.. Potem pa moraš generirati zaporedje znakov, tako dolgo da bo to zaporedje enako tistemu nizu, ki je bil pretvorjen v MD5 ali tistemu nizu nasploh?
vneses not nevem blablablabla
pa ti zasifrira v j32njn3ide0w923nijfskmfemn
potem pa moraš generirat zaporedje znakov, da dobis ven blablablabla ali j32njn3ide0w923nijfskmfemn?
blablablabla pa se ti mora shraniti v XML? al se ti MD5 shrani v xml?
Pa a ne bi prišlo potem do problema časovne zahtevnost, ker če imaš dolgo MD5 kodo potem bi rabil algoritem dolgo časa da bi to zgeneriral?
Sory k sprašujem mogoče neumnosti, samo ni mi najbolj jasno kaj moramo narediti, ker je bolj bogo razložil.. V enem izdihljaju v 30 sekundah je povedal navodila..
genesiss ::
Seveda bi predolgo trajalo. Če bi papir prepognil 14krat bi bila zadeva debela 1,6m, če bi ga prepognil 30krat bi dosegel zunanje meje atmosfere.
http://raju.varghese.org/articles/power...
http://raju.varghese.org/articles/power...
Zgodovina sprememb…
- spremenil: genesiss ()
c0dehunter ::
Torej, če prav razumem ti vneses recimo not random niz, in potem ti ta niz pretvori v MD5.. Potem pa moraš generirati zaporedje znakov, tako dolgo da bo to zaporedje enako tistemu nizu, ki je bil pretvorjen v MD5 ali tistemu nizu nasploh?
Da bo md5 generiranega zaporedja enak md5 prvotnega niza. Ker v RL maš ti npr. nek DB enga foruma, in tam not so shranjena ne plain gesla ampak md5 gesel (ponekod je dodan še salt, ampak recimo da ga v našem primeru ni). No, in če hočeš ti dobit geslo, boš moral primerjat MD5 med seboj..
potem pa moraš generirat zaporedje znakov, da dobis ven blablablabla ali j32njn3ide0w923nijfskmfemn?
generiraš seveda stringe, iz katerih naknadno izvlečeš MD5.
blablablabla pa se ti mora shraniti v XML? al se ti MD5 shrani v xml?
Ne, brute force in dictionary attack sta dve različni stvari. Eno nima z drugim ničesar skupnega. Pri bruteforce sam generiraš možna gesla, pri dictionary attack pa imaš možna gesla že v datoteki.
Pa a ne bi prišlo potem do problema časovne zahtevnost, ker če imaš dolgo MD5 kodo potem bi rabil algoritem dolgo časa da bi to zgeneriral?
MD5 je vedno konstantne dolžine 32 znakov. Generiraš stringe možnih gesel, ne MD5 hashe.
I do not agree with what you have to say,
but I'll defend to the death your right to say it.
but I'll defend to the death your right to say it.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Web services - Neveljavni karakterji v XMLOddelek: Programiranje | 4126 (3238) | boolsheat |
» | delo z niziOddelek: Programiranje | 2971 (2515) | tx-z |
» | javascript nerazumljivoOddelek: Programiranje | 1404 (1261) | netanyahu |
» | [C] Narascajoce sortiranje linearnega seznamaOddelek: Programiranje | 1852 (1741) | Jebiveter |
» | Pomoč pri MySQL in PHP...Oddelek: Programiranje | 1806 (1674) | darh |