package org.pac4j.http.credentials; import static java.lang.String.copyValueOf; import org.apache.commons.codec.binary.Hex; import org.pac4j.core.context.HttpConstants; import org.pac4j.core.exception.TechnicalException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * This class contains utility methods related to credential encryption algorithms * (MD5 for http digest) * * @author Mircea Carasel * @since 1.9.0 */ public final class CredentialUtil { /** * Defined in rfc 2617 as H(data) = MD5(data); * * @param data data * @return MD5(data) */ public static String encryptMD5(String data) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); return copyValueOf(Hex.encodeHex(digest.digest(data.getBytes(HttpConstants.UTF8_ENCODING)))); } catch (final UnsupportedEncodingException e) { throw new TechnicalException(e); } catch (final NoSuchAlgorithmException ex) { throw new TechnicalException("Failed to instantiate an MD5 algorithm", ex); } } /** * Defined in rfc 2617 as KD(secret, data) = H(concat(secret, ":", data)) * * @param data data * @param secret secret * @return H(concat(secret, ":", data)); */ public static String encryptMD5(String secret, String data) { return encryptMD5(secret + ":" + data); } }