0

Hello,

I hope someone is more knowledgeable in Java than me while still knowing PHP!

The following Java code makes a hash from a string, and I need a PHP equivalent that makes the exact same hashes.
Simply md5() does not do the trick, and I looked at some PHP libraries for BigInteger but maybe it is over-kill to include all sorts of third party libraries?

public static String encrypt( String source ){
    String md5=null;
    try{
        MessageDigest mdEnc = MessageDigest.getInstance("MD5"); // Encryption algorithm
        mdEnc.update(source.getBytes(), 0, source.length());
        md5 = new BigInteger(1, mdEnc.digest()).toString(16); // Encrypted string
    }
    catch(Exception ex){
        return null;
    }
    return md5;
}

Thanks!

4
Contributors
4
Replies
31
Views
3 Years
Discussion Span
Last Post by Excizted
0

You're on the ball there cereal. Even though there's some bloat code in that java method and I wanna pull my hair out everytime I see Java devs being lazy by catching all and any exceptions instead of method specific ones, all that method is doing is outputting an md5 hash.

God I love PHP! So simple, yet so beautiful.

0

for this

mdEnc.update(source.getBytes(), 0, source.length());

not sure if you can get away with it using the PHP function called ord .

Again, I am pretty much speculating here trying to mimic that iteration effects against the length of the input string.

In PHP the lenght of the string can be determine by strlen function. Now, there is a problem with the strlen function in PHP, because all spaces are considered or treated like strings. Therefore " hello + 4 spaces ", will have a strlen value of 10 ( one space before the h and 4 spaces after the o). To alleviate this trouble, PHP offers a solution called trim.

So, now everything are in place. You just need to realize the output of the getBytes() in Java ( I know what it is, I just want you to be resourceful in finding much information about the problem on hand). If the getBytes() returns an ASCII code then, ord is the perfect replacement of it in PHP.

To be able to produce the same results in PHP, you will have to iterate through the input string and process each character with ord.

for example, if we have a "hello_world" string input the ORD output will be somthing like this ( all in ASCII)

Array ( [0] => 104 [1] => 101 [2] => 108 [3] => 108 [4] => 111 [5] => 95 [6] => 119 [7] => 111 [8] => 114 [9] => 108 [10] => 100 ) 

The converted string will then be subject for the md5 hashing.. that's my take on this.

Edited by veedeoo: info added.

1

Thanks for all your answers.
I was sure I tested whether the output from the Java code corresponded to PHP's md5() function, but apparantly I did something wrong. Because I see @cereal was right actually.

Sorry for not noticing this myself!

Thanks again.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.