欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java编程基础:MD5加密算法开发实例

程序员文章站 2022-05-12 20:32:21
...

一、概述

MD5算法是一种不可逆的加密算法,经常用于用户登录密码,身份认证信息的加密。加密后的信息不需要解密还原,在认证的时候只需要对用户输入的密码再次加密,判断两段密文是否相同即可。

下面给一个生产环境的MD5加密算法样例。

二、MD5算法公共函数

package com.elon.md5;

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

/**
 * MD5算法,将一串字符串加密转换为32位数据+大写字母的字符串。
 * 
 * @author elon
 * @version 2018年4月5日
 */
public class MD5Util {

    /**
     * 定义16进制包含的字符,用于加密串转换
     */
    private static final char[] hexDigints = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    /**
     * 加密后返回十六进制的密文。
     * 
     * @param input 输入字符串
     * @return 密文
     * @throws NoSuchAlgorithmException 
     */
    public static String encrypt(String input) throws NoSuchAlgorithmException {

        /**
         * 获取MD5摘要加密算法实例
         */
        MessageDigest md5Intance = MessageDigest.getInstance("MD5");

        md5Intance.update(input.getBytes());
        byte[] md5Encrypt = md5Intance.digest();

        /**
         * MD5算法提取固定长度(16位)摘要信息。结果拆分为高四位和低四位,长度是摘要信息的两倍(32位)
         */
        char[] results = new char[md5Encrypt.length * 2];

        int j = 0;
        for (int i = 0; i < md5Encrypt.length; ++i) {

            /**
             * 每个byte是8位,取高四位或者低四位,最多是15(1111)。用作下标从hexDigints中取值,不会越界。
             */
            results[j++] = hexDigints[(md5Encrypt[i] >>> 4) & 0xF]; //取每个字符高四位数字下标对应的十六进制字符
            results[j++] = hexDigints[md5Encrypt[i] & 0xF]; //取低四位对应的字符
        }

        return String.valueOf(results);

    }
}

三、编写驱动验证,打印加密密文

Java编程基础:MD5加密算法开发实例

相关标签: MD5 Java