Aşağıdaki sınıf verilen bir ifadeyi message digest (hash) işleminden geçirmekte, Hex tipinde String olarak geri döndürmektedir:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PasswordManager {
public static String digest(String password) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte[] hash = md.digest();
StringBuilder sb = new StringBuilder(hash.length * 2);
for (byte b : hash) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
}
public static void main(String[] args)
throws NoSuchAlgorithmException {
String hashed=PasswordManager.digest("fibiler12x");
System.out.println("hashed:"+hashed);
}
}
Yukarıdaki kod bir şifrenin Hex karşılığını bulmak için kullanılabilir. Bir kullanıcı şifre girdiğinde, girilen şifre de aynı fonksiyondan geçirilir ve daha önce hahslenen değerler aynı olup olmadığı kontrol edilebilir.
Aynı örnek aşağıdaki gibi farklı bir şekilde de yapılabilir:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PasswordManager {
public static String digest(String password) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte[] hash = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
if ((0xff & hash[i]) < 0x10) {
hexString.append("0" + Integer.toHexString((0xFF & hash[i])));
} else {
hexString.append(Integer.toHexString(0xFF & hash[i]));
}
}
return hexString.toString();
}
public static void main(String[] args)
throws NoSuchAlgorithmException {
String hex=PasswordManager.digest("abc!12x!");
System.out.println("hex:"+hex);
}
}
Bu örnekte sadece byte dizisinden Hex oluşturma kodu değişmiştir.