All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.codec.digest.DigestUtils Maven / Gradle / Ivy

Go to download

The Apache Commons Codec component contains encoders and decoders for various formats such as Base16, Base32, Base64, digest, and Hexadecimal. In addition to these widely used encoders and decoders, the codec package also maintains a collection of phonetic encoding utilities. This is a port for GWT, which enables program, to use Apache Commons Codec also in the frontend compiled by the gwt compiler to java-script.

There is a newer version: 1.17.1-1
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.commons.codec.digest;

import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.binary.StringUtils;

import com.google.gwt.core.shared.GwtIncompatible;

/**
 * Operations to simplify common {@link java.security.MessageDigest} tasks.
 * This class is immutable and thread-safe.
 *
 * @version $Id: DigestUtils.java 1634433 2014-10-27 01:10:47Z ggregory $
 */
public class DigestUtils {

    private static final int STREAM_BUFFER_LENGTH = 1024;

    /**
     * Read through an InputStream and returns the digest for the data
     *
     * @param digest
     *            The MessageDigest to use (e.g. MD5)
     * @param data
     *            Data to digest
     * @return the digest
     * @throws IOException
     *             On error reading from the stream
     */
    @GwtIncompatible("incompatible method")
    private static byte[] digest(final MessageDigest digest, final InputStream data) throws IOException {
        return updateDigest(digest, data).digest();
    }

    /**
     * Returns a MessageDigest for the given algorithm.
     *
     * @param algorithm
     *            the name of the algorithm requested. See Appendix A in the Java Cryptography Architecture Reference Guide for information about standard
     *            algorithm names.
     * @return A digest instance.
     * @see MessageDigest#getInstance(String)
     * @throws IllegalArgumentException
     *             when a {@link NoSuchAlgorithmException} is caught.
     */
    public static MessageDigest getDigest(final String algorithm) {
        try {
            return MessageDigest.getInstance(algorithm);
        } catch (final NoSuchAlgorithmException e) {
            throw new IllegalArgumentException(e);
        }
    }

    /**
     * Returns an MD2 MessageDigest.
     *
     * @return An MD2 digest instance.
     * @throws IllegalArgumentException
     *             when a {@link NoSuchAlgorithmException} is caught, which should never happen because MD2 is a
     *             built-in algorithm
     * @see MessageDigestAlgorithms#MD2
     * @since 1.7
     */
    public static MessageDigest getMd2Digest() {
        return getDigest(MessageDigestAlgorithms.MD2);
    }

    /**
     * Returns an MD5 MessageDigest.
     *
     * @return An MD5 digest instance.
     * @throws IllegalArgumentException
     *             when a {@link NoSuchAlgorithmException} is caught, which should never happen because MD5 is a
     *             built-in algorithm
     * @see MessageDigestAlgorithms#MD5
     */
    public static MessageDigest getMd5Digest() {
        return getDigest(MessageDigestAlgorithms.MD5);
    }

    /**
     * Returns an SHA-1 digest.
     *
     * @return An SHA-1 digest instance.
     * @throws IllegalArgumentException
     *             when a {@link NoSuchAlgorithmException} is caught, which should never happen because SHA-1 is a
     *             built-in algorithm
     * @see MessageDigestAlgorithms#SHA_1
     * @since 1.7
     */
    public static MessageDigest getSha1Digest() {
        return getDigest(MessageDigestAlgorithms.SHA_1);
    }

    /**
     * Returns an SHA-256 digest.
     * 

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @return An SHA-256 digest instance. * @throws IllegalArgumentException * when a {@link NoSuchAlgorithmException} is caught, which should never happen because SHA-256 is a * built-in algorithm * @see MessageDigestAlgorithms#SHA_256 */ public static MessageDigest getSha256Digest() { return getDigest(MessageDigestAlgorithms.SHA_256); } /** * Returns an SHA-384 digest. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @return An SHA-384 digest instance. * @throws IllegalArgumentException * when a {@link NoSuchAlgorithmException} is caught, which should never happen because SHA-384 is a * built-in algorithm * @see MessageDigestAlgorithms#SHA_384 */ public static MessageDigest getSha384Digest() { return getDigest(MessageDigestAlgorithms.SHA_384); } /** * Returns an SHA-512 digest. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @return An SHA-512 digest instance. * @throws IllegalArgumentException * when a {@link NoSuchAlgorithmException} is caught, which should never happen because SHA-512 is a * built-in algorithm * @see MessageDigestAlgorithms#SHA_512 */ public static MessageDigest getSha512Digest() { return getDigest(MessageDigestAlgorithms.SHA_512); } /** * Returns an SHA-1 digest. * * @return An SHA-1 digest instance. * @throws IllegalArgumentException * when a {@link NoSuchAlgorithmException} is caught * @deprecated Use {@link #getSha1Digest()} */ @Deprecated public static MessageDigest getShaDigest() { return getSha1Digest(); } /** * Calculates the MD2 digest and returns the value as a 16 element byte[]. * * @param data * Data to digest * @return MD2 digest * @since 1.7 */ public static byte[] md2(final byte[] data) { return getMd2Digest().digest(data); } /** * Calculates the MD2 digest and returns the value as a 16 element byte[]. * * @param data * Data to digest * @return MD2 digest * @throws IOException * On error reading from the stream * @since 1.7 */ @GwtIncompatible("incompatible method") public static byte[] md2(final InputStream data) throws IOException { return digest(getMd2Digest(), data); } /** * Calculates the MD2 digest and returns the value as a 16 element byte[]. * * @param data * Data to digest; converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return MD2 digest * @since 1.7 */ public static byte[] md2(final String data) { return md2(StringUtils.getBytesUtf8(data)); } /** * Calculates the MD2 digest and returns the value as a 32 character hex string. * * @param data * Data to digest * @return MD2 digest as a hex string * @since 1.7 */ public static String md2Hex(final byte[] data) { return Hex.encodeHexString(md2(data)); } /** * Calculates the MD2 digest and returns the value as a 32 character hex string. * * @param data * Data to digest * @return MD2 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.7 */ @GwtIncompatible("incompatible method") public static String md2Hex(final InputStream data) throws IOException { return Hex.encodeHexString(md2(data)); } /** * Calculates the MD2 digest and returns the value as a 32 character hex string. * * @param data * Data to digest * @return MD2 digest as a hex string * @since 1.7 */ public static String md2Hex(final String data) { return Hex.encodeHexString(md2(data)); } /** * Calculates the MD5 digest and returns the value as a 16 element byte[]. * * @param data * Data to digest * @return MD5 digest */ public static byte[] md5(final byte[] data) { return getMd5Digest().digest(data); } /** * Calculates the MD5 digest and returns the value as a 16 element byte[]. * * @param data * Data to digest * @return MD5 digest * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static byte[] md5(final InputStream data) throws IOException { return digest(getMd5Digest(), data); } /** * Calculates the MD5 digest and returns the value as a 16 element byte[]. * * @param data * Data to digest; converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return MD5 digest */ public static byte[] md5(final String data) { return md5(StringUtils.getBytesUtf8(data)); } /** * Calculates the MD5 digest and returns the value as a 32 character hex string. * * @param data * Data to digest * @return MD5 digest as a hex string */ public static String md5Hex(final byte[] data) { return Hex.encodeHexString(md5(data)); } /** * Calculates the MD5 digest and returns the value as a 32 character hex string. * * @param data * Data to digest * @return MD5 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static String md5Hex(final InputStream data) throws IOException { return Hex.encodeHexString(md5(data)); } /** * Calculates the MD5 digest and returns the value as a 32 character hex string. * * @param data * Data to digest * @return MD5 digest as a hex string */ public static String md5Hex(final String data) { return Hex.encodeHexString(md5(data)); } /** * Calculates the SHA-1 digest and returns the value as a byte[]. * * @param data * Data to digest * @return SHA-1 digest * @deprecated Use {@link #sha1(byte[])} */ @Deprecated public static byte[] sha(final byte[] data) { return sha1(data); } /** * Calculates the SHA-1 digest and returns the value as a byte[]. * * @param data * Data to digest * @return SHA-1 digest * @throws IOException * On error reading from the stream * @since 1.4 * @deprecated Use {@link #sha1(InputStream)} */ @Deprecated @GwtIncompatible("incompatible method") public static byte[] sha(final InputStream data) throws IOException { return sha1(data); } /** * Calculates the SHA-1 digest and returns the value as a byte[]. * * @param data * Data to digest * @return SHA-1 digest * @deprecated Use {@link #sha1(String)} */ @Deprecated public static byte[] sha(final String data) { return sha1(data); } /** * Calculates the SHA-1 digest and returns the value as a byte[]. * * @param data * Data to digest * @return SHA-1 digest * @since 1.7 */ public static byte[] sha1(final byte[] data) { return getSha1Digest().digest(data); } /** * Calculates the SHA-1 digest and returns the value as a byte[]. * * @param data * Data to digest * @return SHA-1 digest * @throws IOException * On error reading from the stream * @since 1.7 */ @GwtIncompatible("incompatible method") public static byte[] sha1(final InputStream data) throws IOException { return digest(getSha1Digest(), data); } /** * Calculates the SHA-1 digest and returns the value as a byte[]. * * @param data * Data to digest; converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return SHA-1 digest */ public static byte[] sha1(final String data) { return sha1(StringUtils.getBytesUtf8(data)); } /** * Calculates the SHA-1 digest and returns the value as a hex string. * * @param data * Data to digest * @return SHA-1 digest as a hex string * @since 1.7 */ public static String sha1Hex(final byte[] data) { return Hex.encodeHexString(sha1(data)); } /** * Calculates the SHA-1 digest and returns the value as a hex string. * * @param data * Data to digest * @return SHA-1 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.7 */ @GwtIncompatible("incompatible method") public static String sha1Hex(final InputStream data) throws IOException { return Hex.encodeHexString(sha1(data)); } /** * Calculates the SHA-1 digest and returns the value as a hex string. * * @param data * Data to digest * @return SHA-1 digest as a hex string * @since 1.7 */ public static String sha1Hex(final String data) { return Hex.encodeHexString(sha1(data)); } /** * Calculates the SHA-256 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-256 digest * @since 1.4 */ public static byte[] sha256(final byte[] data) { return getSha256Digest().digest(data); } /** * Calculates the SHA-256 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-256 digest * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static byte[] sha256(final InputStream data) throws IOException { return digest(getSha256Digest(), data); } /** * Calculates the SHA-256 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest; converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return SHA-256 digest * @since 1.4 */ public static byte[] sha256(final String data) { return sha256(StringUtils.getBytesUtf8(data)); } /** * Calculates the SHA-256 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-256 digest as a hex string * @since 1.4 */ public static String sha256Hex(final byte[] data) { return Hex.encodeHexString(sha256(data)); } /** * Calculates the SHA-256 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-256 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static String sha256Hex(final InputStream data) throws IOException { return Hex.encodeHexString(sha256(data)); } /** * Calculates the SHA-256 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-256 digest as a hex string * @since 1.4 */ public static String sha256Hex(final String data) { return Hex.encodeHexString(sha256(data)); } /** * Calculates the SHA-384 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-384 digest * @since 1.4 */ public static byte[] sha384(final byte[] data) { return getSha384Digest().digest(data); } /** * Calculates the SHA-384 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-384 digest * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static byte[] sha384(final InputStream data) throws IOException { return digest(getSha384Digest(), data); } /** * Calculates the SHA-384 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest; converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return SHA-384 digest * @since 1.4 */ public static byte[] sha384(final String data) { return sha384(StringUtils.getBytesUtf8(data)); } /** * Calculates the SHA-384 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-384 digest as a hex string * @since 1.4 */ public static String sha384Hex(final byte[] data) { return Hex.encodeHexString(sha384(data)); } /** * Calculates the SHA-384 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-384 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static String sha384Hex(final InputStream data) throws IOException { return Hex.encodeHexString(sha384(data)); } /** * Calculates the SHA-384 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-384 digest as a hex string * @since 1.4 */ public static String sha384Hex(final String data) { return Hex.encodeHexString(sha384(data)); } /** * Calculates the SHA-512 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-512 digest * @since 1.4 */ public static byte[] sha512(final byte[] data) { return getSha512Digest().digest(data); } /** * Calculates the SHA-512 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-512 digest * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static byte[] sha512(final InputStream data) throws IOException { return digest(getSha512Digest(), data); } /** * Calculates the SHA-512 digest and returns the value as a byte[]. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest; converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return SHA-512 digest * @since 1.4 */ public static byte[] sha512(final String data) { return sha512(StringUtils.getBytesUtf8(data)); } /** * Calculates the SHA-512 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-512 digest as a hex string * @since 1.4 */ public static String sha512Hex(final byte[] data) { return Hex.encodeHexString(sha512(data)); } /** * Calculates the SHA-512 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-512 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.4 */ @GwtIncompatible("incompatible method") public static String sha512Hex(final InputStream data) throws IOException { return Hex.encodeHexString(sha512(data)); } /** * Calculates the SHA-512 digest and returns the value as a hex string. *

* Throws a RuntimeException on JRE versions prior to 1.4.0. *

* * @param data * Data to digest * @return SHA-512 digest as a hex string * @since 1.4 */ public static String sha512Hex(final String data) { return Hex.encodeHexString(sha512(data)); } /** * Calculates the SHA-1 digest and returns the value as a hex string. * * @param data * Data to digest * @return SHA-1 digest as a hex string * @deprecated Use {@link #sha1Hex(byte[])} */ @Deprecated public static String shaHex(final byte[] data) { return sha1Hex(data); } /** * Calculates the SHA-1 digest and returns the value as a hex string. * * @param data * Data to digest * @return SHA-1 digest as a hex string * @throws IOException * On error reading from the stream * @since 1.4 * @deprecated Use {@link #sha1Hex(InputStream)} */ @Deprecated @GwtIncompatible("incompatible method") public static String shaHex(final InputStream data) throws IOException { return sha1Hex(data); } /** * Calculates the SHA-1 digest and returns the value as a hex string. * * @param data * Data to digest * @return SHA-1 digest as a hex string * @deprecated Use {@link #sha1Hex(String)} */ @Deprecated public static String shaHex(final String data) { return sha1Hex(data); } /** * Updates the given {@link MessageDigest}. * * @param messageDigest * the {@link MessageDigest} to update * @param valueToDigest * the value to update the {@link MessageDigest} with * @return the updated {@link MessageDigest} * @since 1.7 */ public static MessageDigest updateDigest(final MessageDigest messageDigest, final byte[] valueToDigest) { messageDigest.update(valueToDigest); return messageDigest; } /** * Reads through an InputStream and updates the digest for the data * * @param digest * The MessageDigest to use (e.g. MD5) * @param data * Data to digest * @return the digest * @throws IOException * On error reading from the stream * @since 1.8 */ @GwtIncompatible("incompatible method") public static MessageDigest updateDigest(final MessageDigest digest, final InputStream data) throws IOException { final byte[] buffer = new byte[STREAM_BUFFER_LENGTH]; int read = data.read(buffer, 0, STREAM_BUFFER_LENGTH); while (read > -1) { digest.update(buffer, 0, read); read = data.read(buffer, 0, STREAM_BUFFER_LENGTH); } return digest; } /** * Updates the given {@link MessageDigest}. * * @param messageDigest * the {@link MessageDigest} to update * @param valueToDigest * the value to update the {@link MessageDigest} with; * converted to bytes using {@link StringUtils#getBytesUtf8(String)} * @return the updated {@link MessageDigest} * @since 1.7 */ public static MessageDigest updateDigest(final MessageDigest messageDigest, final String valueToDigest) { messageDigest.update(StringUtils.getBytesUtf8(valueToDigest)); return messageDigest; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy