I found a much-needed Java programming tip in a LiveJournal XML-RPC client programming discussion this afternoon: How to create an MD5-hashed password from a string.

Radio UserLand only presents hashed passwords when publishing via XML-RPC, storing the plain text version in the object database. The following class method can be used to create a hash from a string:

public static String hashPassword(String password) {
String hashword = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(password.getBytes());
BigInteger hash = new BigInteger(1, md5.digest());
hashword = hash.toString(16);
} catch (NoSuchAlgorithmException nsae) {
// ignore
}
return hashword;
}

MessageDigest and NoSuchAlgorithm are from the java.security package. At this point, I only have tested it with JStorageSystem, an open-source Java implementation of the Radio Community Server that I am working on. Programmer emptor.

-- Rogers Cadenhead

Comments

The proposed method does not work correctly,
if the md5 digest contains a MSB which is
less 0x10. In this case the hash string is
only 31 characters long instead of 32.

Greetings from Bremen,

Daniel Krügler


 

That's a lot of code for a single hash!

For comparison, the Python version:

import md5
hashword = md5.md5(password).hexdigest()


 

I'd like to have an information please:

I'm working on the draft "Computational Puzzle against SPAM", which "defines a mechanism for a proxy or UAS to request that a UAC compute the solution to a puzzle.
The puzzle is based on finding a value called the pre-image that, when hashed with SHA1, results in a specific value referred to as the image."

I need to hash a String, to compare it with a value, and to increment my String to try his next value.
Could you tell me how it would be possible to increment a String please???

Thank you very much, best regards,
Geoffrey


 

>>The proposed method does not work correctly

Very true! I ignored this comment and it caused headaches ;) Some passowrds work but others don't.

With this method:
"test" ->
98f6bcd4621d373cade4e832627b4f6

When it should be:
098f6bcd4621d373cade4e832627b4f6
(note the '0')

Adding something like:
if(hashword.length() == 31){
hashword = "0"+hashword;
}
makes it work.


 

Note that Jakarta Commons has a utility for accomplishing this for MD5 and SHA:
jakarta.apache.org


 

hi , this is good, but i want to get string valuu from Hex, is it possible?
mail me at vsharma@zeomega.com


 

Isn't it possible to have more than one leading zero? How about:

public String toHex (String hashword) {
String h = hashword;
while (h.length < 32) h = "0" + h; return h; }


 

Hi,
pls tell me how to decrypt to get the source value.


 

you should create a cycle from 0 to infinite and check what number generates this md5, you could find several numbers XD


 

How to MD5 to String again or decode ?


 

Thanks, it worked properly for me.


 

Thank you! It looks that The method does not work correctly, the expected MD5 value shoud be 32 characters. You should add the following line:
while (hashtext.length() < 32) { hashtext = "0" + hashtext; } check out: Java MD5 example

Hopefully see you again


 

Your blog provided us with valuable information to work with. Each & every tips of your post are awesome. Thanks a lot for sharing. Keep blogging.. Joseph Hayon


 

Add a Comment

These HTML tags are permitted: p, b, i, a, and blockquote. A comment may not include more than three links. Participants in this discussion should note the site's moderation policy.

:
:
: