| // 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; |
| |
| /** |
| * 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(); |
| } |
| } |