Avatar billede sigurtj Nybegynder
24. maj 2010 - 22:33 Der er 8 kommentarer

MD5 kodeforklaring

Er der nogle venligst en der kan forklare mig hvordan den her MD5-kode virker og hvad den helt præcist gør :)?

public class MD5Calc {

      private String md5val;

      public MD5Calc (String pass) throws NoSuchAlgorithmException{
            md5val = md5(pass);
        }

        public static String md5(String s) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        return toHex(md.digest(s.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();
        }
    @Override

          public String toString() {
          return md5val;
      }
}
Avatar billede arne_v Ekspert
24. maj 2010 - 22:40 #1
Det var vist noget kode der blev bixet her for en maanedstid siden ikke?
Avatar billede arne_v Ekspert
24. maj 2010 - 22:42 #2
Men koden er ikke saa svaer:

en constructor som beregner MD5 af password og gemmer i et field

en metode som beregner MD5 via den indbyggede suppport i Java

en metode til at konvertere et byte array til en hex string

en toString metode saa objekter kan udskrives uden videre
Avatar billede sigurtj Nybegynder
25. maj 2010 - 09:40 #3
Jo det var det, men det er fordi vi skal sidde og lave nogle klassebeskrivelser, så derfor er det meget godt at vide lidt om det :)

Men kan du forklare nærmere om toHex-metoden?

        private static String toHex(byte[] ba) {
        char hexdigit[] = { '0', '1', '2', '3', '4', '5', '6', '7',
                            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

- Her flyder man char arrayet op med de følgenede elementer?

- Hvad gør en StringBuffer sb = new StringBuffer(""); , præcist?


        for (int i = 0; i < ba.length; i++) {
          sb.append(hexdigit[(ba[i] >> 4) & 0x0F]);
          sb.append(hexdigit[ba[i] & 0x0F]);
        }

- Hvad er det præcist der sker i denne forløkkke?
Avatar billede arne_v Ekspert
25. maj 2010 - 14:59 #4
hexdigit er de 16 cifre i 16 tals systemet

StringBuffer (siden 2004 burde man nok ioevrigt bruge StringBuilder) bruges til at opsamle hex cifrene. Hver byte bliver til to hex cifre. De fire high bits og de fire low bits.
Avatar billede sigurtj Nybegynder
25. maj 2010 - 15:21 #5
Og hvad siger du de 4 high og low bits er?
Avatar billede arne_v Ekspert
25. maj 2010 - 16:08 #6
(ba[i] >> 4) & 0x0F    giver de 4 hoejeste bits
ba[i] & 0x0F            giver de 4 laveste bits
Avatar billede arne_v Ekspert
25. maj 2010 - 16:08 #7
Hvis det er for forvirrende, saa brug Integer.toHexString metoden i.s.f. !
Avatar billede arne_v Ekspert
13. juni 2010 - 03:57 #8
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester