Java md5, php method

I am working on this watch, but I cannot get it to work.

I mainly develop a REST client in Java for a REST server in PHP. Both the client and server must calculate the md5 strings, and the server will compare them for authentication (kinda).

On the server, the PHP code:

md5("getTokenapi_keybf8ddfs845jhre980543jhsjfro93fd8capi_ver1tokeniud9ER£jdfff"); 

which generates:

 4d7b2e42c3dfd11de3e77b9fe2211b87 

Nice!

Here is the code for the client:

 import java.security.*; .... String s = "getTokenapi_keybf8ddfs845jhre980543jhsjfro93fd8capi_ver1tokeniud9ER£jdfff"; byte[] bytesOfMessage = s.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] thedigest = md.digest(bytesOfMessage); System.out.println("String2: " + thedigest); System.out.println("String3: " + new String(thedigest)); 

This generates:

 String2: [B@42e816 String3: M{.B     {  !  

How can I get Java to calculate the sum of md5 in the same way as PHP does?

Thanks Dan

+7
java md5
source share
5 answers

Try:

 public static String md5(String input) throws NoSuchAlgorithmException { String result = input; if(input != null) { MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1" md.update(input.getBytes()); BigInteger hash = new BigInteger(1, md.digest()); result = hash.toString(16); while(result.length() < 32) { //40 for SHA-1 result = "0" + result; } } return result; } 

code http://web.archive.org/web/20140209230440/http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or -mysql /

+20
source share

Found myself:

 import java.math.BigInteger; .. public static String md5(String input) throws NoSuchAlgorithmException { String result = input; if(input != null) { MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1" md.update(input.getBytes()); BigInteger hash = new BigInteger(1, md.digest()); result = hash.toString(16); if ((result.length() % 2) != 0) { result = "0" + result; } } return result; } 

Source: http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or-mysql/

+3
source share

You are outputting raw md5, which is just a bunch of bytes. You will get the same result in php if you said md5 ("some string", true).

Instead, you need to convert the bytes to ascii characters.

+2
source share

You need to convert the result to a HEX view. Here's how to do it in the Fast MD5 library :

  private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', }; /** * Turns array of bytes into string representing each byte as unsigned hex * number. * * @param hash * Array of bytes to convert to hex-string * @return Generated hex string */ public static String asHex(byte hash[]) { char buf[] = new char[hash.length * 2]; for (int i = 0, x = 0; i < hash.length; i++) { buf[x++] = HEX_CHARS[(hash[i] >>> 4) & 0xf]; buf[x++] = HEX_CHARS[hash[i] & 0xf]; } return new String(buf); } 

Therefore, you will need to call System.out.println("String3: " + asHex(thedigest));

+1
source share

if you use spring security framework just do:

 import org.springframework.security.authentication.encoding.* new Md5PasswordEncoder().encodePassword("myWord",null) 

Same result as PHP::md5() . I confirm

Additional examples

+1
source share

All Articles