mboost-dp1
Kunsten at knække et password
- Forside
- ⟨
- Forum
- ⟨
- Tagwall
Selvom denne tråd naturligvis udspringer af hacket af newz.dk vil jeg gerne opfordre til at der i denne tråd ikke blive diskuteret generelt om sagen, men derimod om det at knække passwords.
Når sådan noget som det her sker, så bliver man lidt nysgerrig om hvordan sådan noget password cracking foregår og hvor lang tid det egentlig tager.
Der er blevet snakket lidt om at hvis man vælger et password på 8+ karakterer og lidt tal og bogstaver samt specialtegn så vil det tage flere hundrede år at cracke det. Jeg kunne god tænke mig at prøve det på min egen computer, men det er nok ikke specielt smart at begynde at spørge efter cracking-software uden at forklare lidt om formålet.
Jeg har læst en del artikler på eksperten.dk og der bliver der snakket en del om programmet L0phtcrack som skulle være ganske godt til formålet. Jeg går ikke ud fra at et sådant program ligger til fri download rundt omkring på de store sitets på grund af det formål det tjener hvis det kommer i de forkerte hænder. Men er der nogen der ved om man kan få fat i et lignende program, så man kan prøve det lidt på sin egen maskine?
Jeg ved godt at hvis man vælger 8+ karakterer med forskellige tegn og tal samt specialtegn så giver det en hulens masse kombinationsmuligheder. Men hvor mange kombinationer kan en moderne computer egentlig afprøve i sekundet?
Håber på en god og saglig debat om kryptering og cracking af passwords :)
Når sådan noget som det her sker, så bliver man lidt nysgerrig om hvordan sådan noget password cracking foregår og hvor lang tid det egentlig tager.
Der er blevet snakket lidt om at hvis man vælger et password på 8+ karakterer og lidt tal og bogstaver samt specialtegn så vil det tage flere hundrede år at cracke det. Jeg kunne god tænke mig at prøve det på min egen computer, men det er nok ikke specielt smart at begynde at spørge efter cracking-software uden at forklare lidt om formålet.
Jeg har læst en del artikler på eksperten.dk og der bliver der snakket en del om programmet L0phtcrack som skulle være ganske godt til formålet. Jeg går ikke ud fra at et sådant program ligger til fri download rundt omkring på de store sitets på grund af det formål det tjener hvis det kommer i de forkerte hænder. Men er der nogen der ved om man kan få fat i et lignende program, så man kan prøve det lidt på sin egen maskine?
Jeg ved godt at hvis man vælger 8+ karakterer med forskellige tegn og tal samt specialtegn så giver det en hulens masse kombinationsmuligheder. Men hvor mange kombinationer kan en moderne computer egentlig afprøve i sekundet?
Håber på en god og saglig debat om kryptering og cracking af passwords :)
... du kan bare lave et lille C program der løber i gennem en liste med alle tegn, på samme måde som det var en tal liste du skulle læbe igennem.
et MD5 hash af resultaterne skal så sammenlignes med det MD5 hash'et password
på den måde vil du før eller siden finde den rigtige kode.
et MD5 hash af resultaterne skal så sammenlignes med det MD5 hash'et password
på den måde vil du før eller siden finde den rigtige kode.
Du kan teste passswords på 2 forskellige måder:
1) finde en liste med 100000-1000000 typiske passwords
2) systematisk generere alle mulige kombinationer af en given
længde udfra et givet tegnsæt
Du kan angribe på 2 måder:
A) udregne hash af passwords løbende
B) bruge en stor database med plain-hash og slå op i den (herunder den specielle form der hedder rainbow tables)
Det giver 4 muligheder ialt.
Hvormange hashes man an beregne per sekund afhænger naturligvis af den brugte algoritme.
newz.dk bruger SHA-256 hvilket er en god algoritme.
Jeg lavede en lille test og udfra den vil jeg anslå at en PC kan udregne mellem 100000 og 1 million SHA-256 hashes per sekund.
D.v.s. at hvis ens password er et af den kendte jævnfør #1, så er man dead meat hvis ens hash ryger ud.
For ikke kendte passwords kan man jo regne lidt:
8 tegn [a-z0-9] -> 36^8 muligheder -> 783 CPU timer
14 tegn [A-Za-z0-9] -> 62^14 muligheder -> 393 milliarder CPU år (så skal man jo nok til at indregne forbedringer i CPU hastighed over tid !)
Brug af salt forhindrer #B men ikke #A.
Brug af forskellig salt per brugernavn gør #A en lille smule sværere.
1) finde en liste med 100000-1000000 typiske passwords
2) systematisk generere alle mulige kombinationer af en given
længde udfra et givet tegnsæt
Du kan angribe på 2 måder:
A) udregne hash af passwords løbende
B) bruge en stor database med plain-hash og slå op i den (herunder den specielle form der hedder rainbow tables)
Det giver 4 muligheder ialt.
Hvormange hashes man an beregne per sekund afhænger naturligvis af den brugte algoritme.
newz.dk bruger SHA-256 hvilket er en god algoritme.
Jeg lavede en lille test og udfra den vil jeg anslå at en PC kan udregne mellem 100000 og 1 million SHA-256 hashes per sekund.
D.v.s. at hvis ens password er et af den kendte jævnfør #1, så er man dead meat hvis ens hash ryger ud.
For ikke kendte passwords kan man jo regne lidt:
8 tegn [a-z0-9] -> 36^8 muligheder -> 783 CPU timer
14 tegn [A-Za-z0-9] -> 62^14 muligheder -> 393 milliarder CPU år (så skal man jo nok til at indregne forbedringer i CPU hastighed over tid !)
Brug af salt forhindrer #B men ikke #A.
Brug af forskellig salt per brugernavn gør #A en lille smule sværere.
#2 - Nej, det kan jeg ikke "bare" lige lave :)
#3 - Hvis vi antager at en PC kan udregne 1.000.000 pr. sekund, så vil et dictonary attack som du beskriver i metode #1 ikke tage voldsomt lang tid. Jeg ved ikke hvor mange ord en normal ordbog cirka indeholder med siden gdataonline.com har f.eks. en database (rainbow table?) på 1,133,736,548 hashes. Det vil altså tage cirka 1000 sekunder eller 20 mins at løbe hele den liste igennem.
Din metode #2 (Brute-forcing) synes jeg er meget interessant at regne lidt på. Du siger:
Kan du fortælle lidt mere om den test? Har du skrevet en kodestump eller hvordan?
En anden ting: Hvorfor vælger man egentlig at anvende SHA-256 når der både findes SHA-384 og SHA-512? Kræver det virkelig så meget mere af newz.dk serveren at det ikke kan betale sig?
Jeg ved ikke så meget om det (hvorfor jeg også har startet denne tråd) men er det ikke noget med at SHA-256 giver en 32 chars hash værdi og de to andre giver en noget længere? Er sikkerheden (den tid det tager at brute-force sig frem til koden) ikke meget bedre på 384 og 512?
Det er jo en kæmpe forskel og i særdeleshed et glimrende argument for at bruge et avanceret password. Hvordan er du kommet frem til tiden i CPU timer? Er det ved at bruge 1.000.000 hash udregninger pr. sekund eller hvad?
#3 - Hvis vi antager at en PC kan udregne 1.000.000 pr. sekund, så vil et dictonary attack som du beskriver i metode #1 ikke tage voldsomt lang tid. Jeg ved ikke hvor mange ord en normal ordbog cirka indeholder med siden gdataonline.com har f.eks. en database (rainbow table?) på 1,133,736,548 hashes. Det vil altså tage cirka 1000 sekunder eller 20 mins at løbe hele den liste igennem.
Din metode #2 (Brute-forcing) synes jeg er meget interessant at regne lidt på. Du siger:
Jeg lavede en lille test og udfra den vil jeg anslå at en PC kan udregne mellem 100000 og 1 million SHA-256 hashes per sekund.
Kan du fortælle lidt mere om den test? Har du skrevet en kodestump eller hvordan?
En anden ting: Hvorfor vælger man egentlig at anvende SHA-256 når der både findes SHA-384 og SHA-512? Kræver det virkelig så meget mere af newz.dk serveren at det ikke kan betale sig?
Jeg ved ikke så meget om det (hvorfor jeg også har startet denne tråd) men er det ikke noget med at SHA-256 giver en 32 chars hash værdi og de to andre giver en noget længere? Er sikkerheden (den tid det tager at brute-force sig frem til koden) ikke meget bedre på 384 og 512?
8 tegn [a-z0-9] -> 36^8 muligheder -> 783 CPU timer
14 tegn [A-Za-z0-9] -> 62^14 muligheder -> 393 milliarder CPU år
Det er jo en kæmpe forskel og i særdeleshed et glimrende argument for at bruge et avanceret password. Hvordan er du kommet frem til tiden i CPU timer? Er det ved at bruge 1.000.000 hash udregninger pr. sekund eller hvad?
#5
Ja - jeg skrev lige en stump Java til at teste med.
Fordi de næppe vil være mere sikre end SHA-256.
Der er ingen af de angreb som er nævnt ovenfor hvor hash længden gør en forskel.
Der er andre former for angreb (husk at hash bruges til andet end password), hvor længden betyder noget, men her anses SHA-256 for at være sikkert.
Ja.
Har du skrevet en kodestump eller hvordan?
Ja - jeg skrev lige en stump Java til at teste med.
Hvorfor vælger man egentlig at anvende SHA-256 når der både findes SHA-384 og SHA-512?
Fordi de næppe vil være mere sikre end SHA-256.
Der er ingen af de angreb som er nævnt ovenfor hvor hash længden gør en forskel.
Der er andre former for angreb (husk at hash bruges til andet end password), hvor længden betyder noget, men her anses SHA-256 for at være sikkert.
Det er jo en kæmpe forskel og i særdeleshed et glimrende argument for at bruge et avanceret password. Hvordan er du kommet frem til tiden i CPU timer? Er det ved at bruge 1.000.000 hash udregninger pr. sekund eller hvad?
Ja.
Mit password var f.eks "helle". Newz havde været så venlige at stille en hash krypteret udgave frit til rådighed for TGG. Det betyder at TGG kunne se at mit hash krypteret password var:
cd44092e51f1c170469f6a4f36dc2f80
Heldigvis for TGG er der nogen der igennem tiden har samlet en liste over en masse almindelige ord og deres tilhørende hash kryptering. Det betyder, at hvis man f.eks går ind på et website som dette:
http://md5.gromweb.no-ip.com/index.php?md5=cd44092...
.. så vil man kunne se at den hash krypterede værdi kommer af ordet "helle".
Det er også derfor at de passwords der er blevet cracket ikke er passwords som "Ih4v3ApAsswordN00neC4nCrack!!^". Passwords som dette er der meget lille sandsynlighed for ville findes i en sådan liste over hash krypterede ord.
cd44092e51f1c170469f6a4f36dc2f80
Heldigvis for TGG er der nogen der igennem tiden har samlet en liste over en masse almindelige ord og deres tilhørende hash kryptering. Det betyder, at hvis man f.eks går ind på et website som dette:
http://md5.gromweb.no-ip.com/index.php?md5=cd44092...
.. så vil man kunne se at den hash krypterede værdi kommer af ordet "helle".
Det er også derfor at de passwords der er blevet cracket ikke er passwords som "Ih4v3ApAsswordN00neC4nCrack!!^". Passwords som dette er der meget lille sandsynlighed for ville findes i en sådan liste over hash krypterede ord.
#1
Den slags programmer ligger nu til rådighed alligevel, da de også bliver brugt af sikkerheds-folk.
Fx. indeholder Debian Linux programmet "medussa":
Der er også port-scanner og sikkert mange andre sjove ting.
Sådan nogle "password-guessers" (eller hvad man nu kalder dem) bliver nogle gange brugt af system-administratorer, til at se om folk bruger svage kodeord.
Port-scannere bliver brugt på sit eget netværk, til at se hvad andre vil opdage med en port-scan.
Jeg går ikke ud fra at et sådant program ligger til fri download rundt omkring på de store sitets på grund af det formål det tjener hvis det kommer i de forkerte hænder.
Den slags programmer ligger nu til rådighed alligevel, da de også bliver brugt af sikkerheds-folk.
Fx. indeholder Debian Linux programmet "medussa":
Medussa is a distributed password cracking system that can attempt various types of attacks to crypted passwords distributing the work on many machines.
Der er også port-scanner og sikkert mange andre sjove ting.
Sådan nogle "password-guessers" (eller hvad man nu kalder dem) bliver nogle gange brugt af system-administratorer, til at se om folk bruger svage kodeord.
Port-scannere bliver brugt på sit eget netværk, til at se hvad andre vil opdage med en port-scan.
ved ikke om det kun er mig, men jeg sidder tidt og prøver at hack mine ejen systemer for at tjekke dem eller for andre til det
#7: arne_v: Er den noget du vil dele med os andre? Den lille kodestump. Både source og den færdige :)
#9: myplacedk: Okay, du kender ikke tilfældigvis nogle programmer til windows som man kan prøve at hente og lege lidt med? Vil da gerne prøve at se hvordan mine forskellige passwords opfører sig overfor sådan et angreb :)
#9: myplacedk: Okay, du kender ikke tilfældigvis nogle programmer til windows som man kan prøve at hente og lege lidt med? Vil da gerne prøve at se hvordan mine forskellige passwords opfører sig overfor sådan et angreb :)
#11
Nej desværre, jeg er ikke så meget inde i Windows-verdenen. :)
Hvis man koder en smule, er en simpel brute-force jo ren 1. semester-stof.
Ellers kunne man tage md5sum'en, og slå op i en rainbow-tabel.
Knapt så sjovt, men det er jo nok det første folk prøver.
Nej desværre, jeg er ikke så meget inde i Windows-verdenen. :)
Hvis man koder en smule, er en simpel brute-force jo ren 1. semester-stof.
Ellers kunne man tage md5sum'en, og slå op i en rainbow-tabel.
Knapt så sjovt, men det er jo nok det første folk prøver.
#16
Hehe, man skal saa ogsaa huske at cpu-tiden der bruges paa at knaekke SHA-256 kan mindskes ved at bruge en blanding af bruteforce og rainbow-tables..
Samtidigt kan man mindske det yderligere ved at have flere maskiner der deles om arbejdet ( Medussa fx ) :)
Saa helt reelt er vi nok ude i noget der ligner:
62^8/1.000.000/3 = sekunder :)
Antaget at man har 3 maskiner i stil med Arne_v's, har man en serverfarm til raadighed gaar det vaesentligt hurtigere ;)
Saa er vi ude i noget lignende 2.3 aar for 1 maskine og saa dividerer du jo bare med x maskiner :)
Hehe, man skal saa ogsaa huske at cpu-tiden der bruges paa at knaekke SHA-256 kan mindskes ved at bruge en blanding af bruteforce og rainbow-tables..
Samtidigt kan man mindske det yderligere ved at have flere maskiner der deles om arbejdet ( Medussa fx ) :)
Saa helt reelt er vi nok ude i noget der ligner:
62^8/1.000.000/3 = sekunder :)
Antaget at man har 3 maskiner i stil med Arne_v's, har man en serverfarm til raadighed gaar det vaesentligt hurtigere ;)
Saa er vi ude i noget lignende 2.3 aar for 1 maskine og saa dividerer du jo bare med x maskiner :)
#18
Man tjekker lige i rainbow tabellen før man giver sig til at brute-force. :)
I øvrigt skal vi huske at de tids-estimater er for at beregne samtlige muligheder, dvs. worst-case hvis man skal bryde én kode.
Gennemsnitstiden for at bryde én kode er det halve. Den reelle tid er et spørgsmål om held, man kunne jo ramme rigtigt inden for 10 sekunder, selv om det tager et år at løbe alle muligheder igennem.
Hvordan fungerer det med at bruge bruteforce og rainbow tables sammen?
Man tjekker lige i rainbow tabellen før man giver sig til at brute-force. :)
I øvrigt skal vi huske at de tids-estimater er for at beregne samtlige muligheder, dvs. worst-case hvis man skal bryde én kode.
Gennemsnitstiden for at bryde én kode er det halve. Den reelle tid er et spørgsmål om held, man kunne jo ramme rigtigt inden for 10 sekunder, selv om det tager et år at løbe alle muligheder igennem.
#19
Hvis vi nu tager udgangspunkt i det der er sket her på newz.dk, så må man formode at de først har kørt hele listen af 25.000 brugere igennem med en rainbow-table, hvilket har givet dem de første 5.000 passwords. Det næste skridt vil så være ren og skær brute-force på de resterende 20.000 passwords, ik?
Det vil sige at hvis man har et password som ikke er i en rainbow-table, så vil det gennemsnitligt tage:
62^8/1.000.000/2/60/60/24/365 = 3,46 år.
Man tjekker lige i rainbow tabellen før man giver sig til at brute-force. :)
Hvis vi nu tager udgangspunkt i det der er sket her på newz.dk, så må man formode at de først har kørt hele listen af 25.000 brugere igennem med en rainbow-table, hvilket har givet dem de første 5.000 passwords. Det næste skridt vil så være ren og skær brute-force på de resterende 20.000 passwords, ik?
Det vil sige at hvis man har et password som ikke er i en rainbow-table, så vil det gennemsnitligt tage:
62^8/1.000.000/2/60/60/24/365 = 3,46 år.
Hvis man bare går op og bruger 9 karakterer så blive det:
62^9/1.000.000/2/60/60/24/365 = 214,6 år.
Så selvom hackeren har 100 computere til rådighed vil det altså stadig tage ham gennemsnitlig 2,14 år at knække koden. Så skal det altså være mere vigtigt end bare en newz.dk konto som gemmer sig bag koden for at man gider gå igang :D
62^9/1.000.000/2/60/60/24/365 = 214,6 år.
Så selvom hackeren har 100 computere til rådighed vil det altså stadig tage ham gennemsnitlig 2,14 år at knække koden. Så skal det altså være mere vigtigt end bare en newz.dk konto som gemmer sig bag koden for at man gider gå igang :D
#20
Man kan så kombinere brute force med et dictionary attack.
Med et dictionary attack genererer man en masse kodeord ud fra en slags ordbog (måske en rigtig ordbog, men helst én tilpasset til formålet, dvs. den indeholder ord som typisk tages udgangspunkt i til kodeord), og ser om der er noget der der passer.
Ved at kombinere brute force og dictionary attack prøver man alle muligheder af, men man starter med de mest sandsynlige.
Dvs. en kode på 16 tegn med store og små bogstaver plus tal og tegn er ikke så god, hvis den fx. er "F1ssef1ssef1sse.". Den bliver måske brudt på få sekunder med dictionary attack, hvis ellers det rigtige ord er tilføjet ordlisten.
Man kan så kombinere brute force med et dictionary attack.
Med et dictionary attack genererer man en masse kodeord ud fra en slags ordbog (måske en rigtig ordbog, men helst én tilpasset til formålet, dvs. den indeholder ord som typisk tages udgangspunkt i til kodeord), og ser om der er noget der der passer.
Ved at kombinere brute force og dictionary attack prøver man alle muligheder af, men man starter med de mest sandsynlige.
Dvs. en kode på 16 tegn med store og små bogstaver plus tal og tegn er ikke så god, hvis den fx. er "F1ssef1ssef1sse.". Den bliver måske brudt på få sekunder med dictionary attack, hvis ellers det rigtige ord er tilføjet ordlisten.
#25: Sådan et spørgsmål skal selvfølgelig ikke stå ubesvaret hen :)
62^8: 218.340.105.584.896 muligheder.
Hver mulighed indeholder 8 karaktere eller 8 bytes om man vil.
Det giver: 1.746.720.844.679.170 bytes
Til hver mulighed vil tabellen også indeholder den dertilhørende hash-værdi som er på 32 tegn eller bytes: 6.986.883.378.716.670 bytes
Tilsammen giver dette: 8.733.604.223.395.840 bytes.
Afrundet giver det:
8.733.604.223.395.840/1024/1024/1024/1024 = 7943 terabytes
62^8: 218.340.105.584.896 muligheder.
Hver mulighed indeholder 8 karaktere eller 8 bytes om man vil.
Det giver: 1.746.720.844.679.170 bytes
Til hver mulighed vil tabellen også indeholder den dertilhørende hash-værdi som er på 32 tegn eller bytes: 6.986.883.378.716.670 bytes
Tilsammen giver dette: 8.733.604.223.395.840 bytes.
Afrundet giver det:
8.733.604.223.395.840/1024/1024/1024/1024 = 7943 terabytes
Det vil sige at hvis man har et password som ikke er i en rainbow-table, så vil det gennemsnitligt tage:
62^8/1.000.000/2/60/60/24/365 = 3,46 år
De 3,46 aar er saa for at finde samtlige passwords, hvis man samtidigt laver en tabel udfra de fundne passwords.
Well det er vel under forudsætning af at man PÅ FORHÅND ved at passwordet ER PRÆCIST 8 tegn langt!
Hvis man nu intet kender til passwordet, så må man jo antage at det kan være fra 1-10 tegn eks, eller fra 4-8 og så beregne ud fra det, og det må jo give endu flere muligheder.
#27: Ja, det er rigtigt nok. Ved brute-force er man nødt til først at prøve alle de muligheder der er hvis passwordet indeholder 1 karakter (hvilket dog ikke tager lang tid med 1.000.000 beregninger i sekundet, men det skal stadig med) og så videre til 2 karakterer.
1 karakter: 0,000031 sekunder
2 karakter: 0,001922 sekunder
3 karakter: 0,119164 sekunder
4 karakter: 7,388168 sekunder
5 karakter: 7,634440 minutter
6 karakter: 7,888921 timer
7 karakter: 20,37971 døgn
8 karakter: 3,461759 år
9 karakter: 214,6290 år
Så i virkeligheden gør det ikke rigtig nogen forskel om man prøver 1-8 karakterer eller bare hopper direkte på 8 karakterer med hensyn til tidsforbruget.
1 karakter: 0,000031 sekunder
2 karakter: 0,001922 sekunder
3 karakter: 0,119164 sekunder
4 karakter: 7,388168 sekunder
5 karakter: 7,634440 minutter
6 karakter: 7,888921 timer
7 karakter: 20,37971 døgn
8 karakter: 3,461759 år
9 karakter: 214,6290 år
Så i virkeligheden gør det ikke rigtig nogen forskel om man prøver 1-8 karakterer eller bare hopper direkte på 8 karakterer med hensyn til tidsforbruget.
#30
Der findes massere af lister.
Deriblant en næsten komplet liste over NTLM hashes, mener enddag kun den er på ca 120Gb.
Men man ender jo hurtigt med mange PB, hvis man skal have komplette lister over alle algoritmer :P
Derudover vil det jo også tage mange år, uanset hvilket computer setup man benytter.
Der findes massere af lister.
Deriblant en næsten komplet liste over NTLM hashes, mener enddag kun den er på ca 120Gb.
Men man ender jo hurtigt med mange PB, hvis man skal have komplette lister over alle algoritmer :P
Derudover vil det jo også tage mange år, uanset hvilket computer setup man benytter.
#11
Her er en version som genererer hashes for alle længder 1..maxlen af et givet tegn sæt.
Problemet er ikke optimeret for hastighed, men skulle gerne illustrere at der ikke er noget specielt avanceret i et sådant program:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HashGenerator {
private static MessageDigest md;
public static void main(String[] args) throws NoSuchAlgorithmException {
md = MessageDigest.getInstance("SHA-256");
printAllHash("abcdefghij", 3);
}
public static void printAllHash(String valid, int maxlen) {
for(int i = 1; i <= maxlen; i++) {
printAllHash(valid.toCharArray(), new char[i], 0);
}
}
public static void printAllHash(char[] valid, char[] buf, int ix) {
if(ix < buf.length) {
for(int i = 0; i < valid.length; i++) {
buf[ix] = valid[i];
printAllHash(valid, buf, ix + 1);
}
} else {
printHash(new String(buf));
}
}
private static void printHash(String pw) {
System.out.println(pw + " -> " + toHex(md.digest(pw.getBytes())));
}
private static String toHex(byte[] ba) {
char hexdigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < ba.length; i++) {
sb.append(hexdigit[(ba[i] >> 4) & 0x0F]);
sb.append(hexdigit[ba[i] & 0x0F]);
}
return sb.toString();
}
}
Her er en version som genererer hashes for alle længder 1..maxlen af et givet tegn sæt.
Problemet er ikke optimeret for hastighed, men skulle gerne illustrere at der ikke er noget specielt avanceret i et sådant program:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HashGenerator {
private static MessageDigest md;
public static void main(String[] args) throws NoSuchAlgorithmException {
md = MessageDigest.getInstance("SHA-256");
printAllHash("abcdefghij", 3);
}
public static void printAllHash(String valid, int maxlen) {
for(int i = 1; i <= maxlen; i++) {
printAllHash(valid.toCharArray(), new char[i], 0);
}
}
public static void printAllHash(char[] valid, char[] buf, int ix) {
if(ix < buf.length) {
for(int i = 0; i < valid.length; i++) {
buf[ix] = valid[i];
printAllHash(valid, buf, ix + 1);
}
} else {
printHash(new String(buf));
}
}
private static void printHash(String pw) {
System.out.println(pw + " -> " + toHex(md.digest(pw.getBytes())));
}
private static String toHex(byte[] ba) {
char hexdigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < ba.length; i++) {
sb.append(hexdigit[(ba[i] >> 4) & 0x0F]);
sb.append(hexdigit[ba[i] & 0x0F]);
}
return sb.toString();
}
}
#45
Her den i PHP:
<?php
function printHash($pw) {
echo $pw . ' -> ' . hash('sha256', $pw) . '<br>';
}
function realPrintAllHash($valid, $buf, $ix, $len) {
if($ix < $len) {
for($i = 0; $i < strlen($valid); $i++) {
$buf[$ix] = $valid[$i];
realPrintAllHash($valid, $buf, $ix + 1, $len);
}
} else {
printHash(implode('',$buf));
}
}
function printAllHash($valid, $maxlen) {
for($i = 1; $i <= $maxlen; $i++) {
realPrintAllHash($valid, array(), 0, $i);
}
}
printAllHash('abcdefghij', 3);
?>
Her den i PHP:
<?php
function printHash($pw) {
echo $pw . ' -> ' . hash('sha256', $pw) . '<br>';
}
function realPrintAllHash($valid, $buf, $ix, $len) {
if($ix < $len) {
for($i = 0; $i < strlen($valid); $i++) {
$buf[$ix] = $valid[$i];
realPrintAllHash($valid, $buf, $ix + 1, $len);
}
} else {
printHash(implode('',$buf));
}
}
function printAllHash($valid, $maxlen) {
for($i = 1; $i <= $maxlen; $i++) {
realPrintAllHash($valid, array(), 0, $i);
}
}
printAllHash('abcdefghij', 3);
?>
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.