diff --git a/core/java/src/net/i2p/util/PasswordManager.java b/core/java/src/net/i2p/util/PasswordManager.java
index 9e0a2ffaeb3ecac9fdbbfe03169fd73abbea191d..83176f7ccf5242995ce928c7fe62449d7d588884 100644
--- a/core/java/src/net/i2p/util/PasswordManager.java
+++ b/core/java/src/net/i2p/util/PasswordManager.java
@@ -161,14 +161,28 @@ public class PasswordManager {
      */
     public static String md5Hex(String subrealm, String user, String pw) {
         String fullpw = user + ':' + subrealm + ':' + pw;
+        try {
+            byte[] data = fullpw.getBytes("ISO-8859-1");
+            byte[] sum = md5Sum(data);
+            if (sum != null)
+                // adds leading zeros if necessary
+                return DataHelper.toString(sum);
+        } catch (UnsupportedEncodingException uee) {}
+        return null;
+    }
+
+    /**
+     *  Standard MD5 checksum
+     *
+     *  @param data non-null
+     *  @return 16 bytes, or null on error
+     */
+    public static byte[] md5Sum(byte[] data) {
         try {
             MessageDigest md = MessageDigest.getInstance("MD5");
-            md.update(fullpw.getBytes("ISO-8859-1"));
-            // adds leading zeros if necessary
-            return DataHelper.toString(md.digest());
-        } catch (UnsupportedEncodingException uee) {
-        } catch (NoSuchAlgorithmException nsae) {
-        }
+            md.update(data);
+            return md.digest();
+        } catch (NoSuchAlgorithmException nsae) {}
         return null;
     }
 }