[JAVA] Få MD5 ur en text-sträng?

Permalänk
Medlem

[JAVA] Få MD5 ur en text-sträng?

Hur gör jag? Hittar bara massa för filer...

md5(str) ger ju en hash-sträng i PHP. Hur gör jag detta i Java?

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

Re: [JAVA] Få MD5 ur en text-sträng?

Citat:

Ursprungligen inskrivet av Zapher
Hur gör jag? Hittar bara massa för filer...

md5(str) ger ju en hash-sträng i PHP. Hur gör jag detta i Java?

Exemplet nedan beror ju på vilken enkodning du vill ha tecknena i.

import java.security.*; //Felhantering och metoduppdelning får du göra själv String str = "MD5 hash me!"; byte[] data = str.getBytes("UTF-8"); //Vilken enkodning vill du ha? Låter php-en välja? Skulle inte tro det 8-) MessageDigest digester = MessageDigest.getInstance("MD5"); byte[] result = digester.digest(data);

Nu ligger då digesten/hashen i result, och är byte-data, så du kan kanske vill konvertera det till en hex-sträng om du vill ha det i ett utskriftsvänligt format.

//C

Permalänk
Medlem

Kan du förklara kod-raderna?
Första getBytes() ger väl hash-summan i bytes? Sen konvertera?
Vad gör andra och tredje raden?

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

Första raden tar ut strängen till en byte-array, andra raden instansierar en MessageDigest-klass och tredje raden kör MessageDigests "digest"-funktion på byte-arrayen i rad 1.

Visa signatur

"`F' is group reply. This is because `G' is for sort and `g' is for get new mail. And `G' is for sort because `sort' used be called `group', and anyway `S' is for save mailbox and `s' is for file message in folder, because `f' is group reply and `F' is group reply including original text."

Permalänk
Medlem

Jo, jag läste på mig lite medans jag väntade svar
Men jag undrade mer i "lätta ord" vad som händer.

1. Strängen görs om till byte
2. Byte arrayen görs om till hex-byte
3. Något mer görs

Om någon är intresserad har jag skrivit ihop en kod från ett exempel jag hittade:

import java.security.*; /** * PasswdGen(erator) generates any given string to a MD5-scrambled 'readable hex' string * * @author Sebastian Holmqvist (byteArrayToHexString() written by Jeff Boyle) * @date July 5, 2005 */ public class PasswdGen { private String str; private byte[] result; /* Scrambles given string to a MD5 binary-hex array */ public PasswdGen(String string) { try { str = string; byte[] data = str.getBytes("UTF-8"); MessageDigest digester = MessageDigest.getInstance("MD5"); result = digester.digest(data); byteArrayToHexString(result); } catch(Exception e) { System.out.println("Error: "+e); } } /* Turns MD5-scrambled byte array into a 'readable hex' string */ public String byteArrayToHexString(byte in[]) { byte ch = 0x00; if (in == null || in.length <= 0) return null; String pseudo[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; StringBuffer out = new StringBuffer(in.length * 2); int i = 0; while (i < in.length) { ch = (byte) (in[i] & 0xF0); // Strip off high nibble ch = (byte) (ch >>> 4); // shift the bits down ch = (byte) (ch & 0x0F); // must do this is high order bit is on! out.append(pseudo[ (int) ch]); // convert the nibble to a String Character ch = (byte) (in[i] & 0x0F); // Strip off low nibble out.append(pseudo[ (int) ch]); // convert the nibble to a String Character i++; } String rslt = new String(out); System.out.println(rslt); return rslt; } }

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Hedersmedlem

Det ska väl vara

str = byteArrayToHexString(result);

?

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Nej, behövs inte?
Jag skickar ju bara vidare. Den metoden returnar ju och printar ut själv?

Just nu gör jag en till klass som kommer användas som användar-gränssnitt.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Hedersmedlem

Ah, missade att den printade resultatet.

Låter bra.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Yey. Nu har jag gjort den andra klassen.
Notera att detta bara är kladdar Jag kodar om det finare sen

Kommer göra en lösenordsgenerator för mobilen som jag ska visa upp sen.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Zapher
Kommer göra en lösenordsgenerator för mobilen som jag ska visa upp sen.

Tänk då på att din telefon måste vara av det mer avancerade slaget. De flesta telefoner kör ju J2ME, som bara har en liten del av standardbiblioteket. Så du kan inte använda java.security-paketet där.

De flesta av de mer avancerade telefonerna kör PersonalJava, som har mycket (bland annat AWT), men inte Digester-prylarna.

Däremot så kan man ju få tag i en md5-digester någon annanstans, det är ju inte vidare svårt, men de är ju oftast ganska stora (närmare iaf 10kB classdata).

//C

Permalänk
Medlem

Oj, det har jag inte tänkt på
Aja, får väl skriva de klasserna själv som jag behöver? Bara kopiera in dem ju.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'