MD5、SHA1和HmacMD5算法的Java实现

本文介绍了Java中MD5、SHA1和HmacMD5算法的实现,包括JDK内置支持,以及第三方库如commons-codec和bouncy-castle的使用。文章详细阐述了MD系列、SHA系列以及HMAC系列算法的基本思想。
摘要由CSDN通过智能技术生成

JDK、第三方库commons-codec和bouncy-castle均对这些有实现。

MD系列算法实现

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD2Digest;
import org.bouncycastle.crypto.digests.MD4Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

public class MD {
   

    private static String srcMsg = "imooc security md";

    public static void main(String[] args) throws NoSuchAlgorithmException {
        jdkMD(srcMsg, "MD5");
        jdkMD(srcMsg, "MD2");

        bcMD(srcMsg, MD5Digest.class);
        bcMD(srcMsg, MD4Digest.class);
        bcMD(srcMsg, MD2Digest.class);
        bcMD4(srcMsg);

        ccMD(srcMsg, "MD5");
        ccMD(srcMsg, "MD2");
        ccMD(srcMsg, "MD4");
    }

    /**
     * JDK MD算法相关实现
     *
     * @param srcMsg 加密消息
     * @param md     支持算法:MD2、MD5
     */
    public static void jdkMD(String srcMsg, String md) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance(md);
            byte[] bytes = messageDigest.digest(srcMsg.getBytes());
            String encodedMsg = Hex.encodeHexString(bytes);
            System.out.println(encodedMsg);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * Bouncy Castle MD算法实现
     *
     * @param srcMsg      加密消息
     * @param digestClass 加密算法对应的实现类,支持的有:
     *                    org.bouncycastle.crypto.digests.MD2Digest
     *                    org.bouncycastle.crypto.digests.MD4Digest
     *                    org.bouncycastle.crypto.digests.MD5Digest
     */
    public static void bcMD(String srcMsg, Class<? extends Digest> digestClass) {
        try {
            Digest digest = digestClass.newInstance();
            digest.update(srcMsg.getBytes(), 0, srcMsg.getBytes().length);
            byte[] bytes =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值