views:

365

answers:

2

I'm trying to port a library from Java into AS3, and I'm down to the MD5 function. I'm using the MD5 library found as part of the project here: http://code.google.com/p/as3crypto/.

I'm getting the length correct, and about half of the values are correct. The ironic thing is the correct values are in the correct spot as well. Only the negative values are wrong. As an example, the two hashes produce:

Java: [127, -16, 107, -93, -103, 1, 104, -5, -111, 12, -126, -91, 61, 32, -67, 61]
AS3: [127, 240, 107, 163, 153, 1, 104, 251, 145, 12, 130, 165, 61, 32, 189, 61]

I've verified that the source String that they are hashing off are the exact same. Not sure what could be implemented differently, or what I need to change in my own implementation.

+4  A: 

-93 and 163 are the same thing

What's happening is that you are printing bit strings as signed numbers, and you aren't evaluating the results with a twos-complement-filter running in your brain.

Hint: notice how all your "incorrect" values are -(256 -("correct" value))?

DigitalRoss
I knew it was something like this, and it was going to drive me crazy...
monvural
A: 

Turns out the issue is exactly what was mentioned by digitalross above, but required that I go into the MD5 class, and work through all of the instances of type uint and move them to be of type int instead.

Thanks for the pointer

monvural