// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.chrome.browser.util; import android.util.Log; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Formatter; import javax.annotation.Nullable; /** * Helper functions for working with hashes. */ public final class HashUtil { private static final String TAG = "HashUtil"; private HashUtil() { } public static class Params { private final String mText; private String mSalt; public Params(String text) { mText = text; } public Params withSalt(String salt) { mSalt = salt; return this; } } public static String getMd5Hash(Params params) { return getHash(params, "MD5"); } private static String getHash(Params params, String algorithm) { try { String digestText = params.mText + (params.mSalt == null ? "" : params.mSalt); MessageDigest m = MessageDigest.getInstance(algorithm); byte[] digest = m.digest(digestText.getBytes()); return encodeHex(digest); } catch (NoSuchAlgorithmException e) { Log.e(TAG, "Unable to find digest algorithm " + algorithm); return null; } } private static String encodeHex(byte[] data) { StringBuilder sb = new StringBuilder(data.length * 2); Formatter formatter = new Formatter(sb); for (byte b : data) { formatter.format("%02x", b); } return sb.toString(); } }