Toon posts:

[java] byte array to char conversie tbhv md5

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik probeer een byte array om te zetten naar chars. Alleen dit lukt niet op de manier zoals ik denk dat het moet. Het resultaat is een aantal vraagtekens. Wie weet wat ik fout doe?

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Test {

    public static void main(String[] args) {        
        byte[] result = getDigest("test".getBytes());
        
        StringBuffer buffer = new StringBuffer();
        for(int i = 0; i < result.length; i += 2){
            byte high = result[i];
            byte low = result[i+1];
            
            char c = (char)((char) low | ((char)high << 8));
            buffer.append(c);
        }
        System.out.println(buffer);
    }
    
    public static byte[] getDigest(byte[] buffer) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(buffer);
            return md5.digest();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
}

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als je er een hexidecimale string van wilt maken dan is deze regel zowiezo verkeerd
Java:
1
char c = (char)((char) low | ((char)high << 8)); 

want in een hexidecimale representatie levert elke byte 2 chars op ( 0xFF = 255 ). Jij probeert hier van 2 bytes een char te maken. En blijkbaar levert dat een char op die niet in de huidige encoding bekend is ( vandaar de vraagtekens ).

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
i wil er inderdaad een hexidecimale string van maken. Suggesties?

Verwijderd

Probeer eens:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class Test { 

  public static void main(String[] args) {         
    byte[] result = getDigest("test".getBytes()); 
    
    //buffer is used to store the hash
    StringBuffer buffer = new StringBuffer();
    //Pull out each char of the byte array into the StringBuffer
    for (int i = 0; i < result.length; i++) {
      buffer.append(Integer.toHexString(0xFF & result[i]));
    }
    System.out.println(buffer); 
  } 
  
  public static byte[] getDigest(byte[] buffer) { 
    byte[] digest = null;
    try { 
      //get instance of the MD5 MessageDigest
      MessageDigest md5 = MessageDigest.getInstance("MD5");
      //ensure the Digest is clear
      md5.reset();
      //Populate Digest with byte array
      md5.update(buffer);
      //Create MD5 Hash
      digest = md5.digest();
    } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
    } 
    return digest;
  } 
}

[ Voor 10% gewijzigd door Verwijderd op 02-03-2005 12:11 ]


Verwijderd

Topicstarter
geniaal, ik ben u zeer erkentelijk