MySQL MD5 and Java MD5 not equal

cryptographic-hash-function, cryptography, java, md5, mysql

Solution

Try encoding in base 16. Just to get you started... 94 in base 16 is 5E.

**Edit:**Try changing your getString method:

private static String getString( byte[] bytes ) 
{
  StringBuffer sb = new StringBuffer();
  for( int i=0; i<bytes.length; i++ )     
  {
     byte b = bytes[ i ];
     String hex = Integer.toHexString((int) 0x00FF & b);
     if (hex.length() == 1) 
     {
        sb.append("0");
     }
     sb.append( hex );
  }
  return sb.toString();
}

Problem

The next function in MySQL `MD5( 'secret' )` generates 5ebe2294ecd0e0f08eab7690d2a6ee69 I would like to have a Java function to generate the same output. But ``` public static String md5( String source ) { try { MessageDigest md = MessageDigest.getInstance( "MD5" ); byte[] bytes = md.digest( source.getBytes("UTF-8") ); return getString( bytes ); } catch( Exception e ) { e.printStackTrace(); return null; } } private static String getString( byte[] bytes ) { StringBuffer sb = new StringBuffer(); for( int i=0; i<bytes.length; i++ ) { byte b = bytes[ i ]; sb.append( ( int )( 0x00FF & b ) ); if( i+1 <bytes.length ) { sb.append( "-" ); } } return sb.toString(); } ``` generates ``` 94-190-34-148-236-208-224-240-142-171-118-144-210-166-238-105 ```

Original source