您当前的位置: 首页 >  算法

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

纯JDK实现 加密算法 之 MD5

梁云亮 发布时间:2020-01-09 14:01:24 ,浏览量:2

简介

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

代码实现

以下示例在JDK11下测试成功,没有使用到第三方jar包。

实现一:
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5Util {
    /**
     * MD5加密
     *
     * @param plainText 待加密的字符串
     * @return 加密后的字符串
     */
    public static String encode(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有这个md5算法!");
        }
        String md5code = new BigInteger(1, secretBytes).toString(16);
        for (int i = 0; i  4]);// 取字节中高 4 位的数字转换
			sb.append(hexChar[b[i] & 0x0f]);// 取字节中低 4 位的数字转换
		}
		return sb.toString();
	}

	public static void main(String[] args) { // 测试方法
		try {
			String encode = encode("123");
			System.out.println(encode);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
实现三
import java.security.MessageDigest;
import java.util.Random;

public class Md5Util {

    /**
     * 将字节数组 转换成 十六进制字符串
     *
     * @param arr 要转换的字节数组
     * @return String 返回十六进制字符串
     */
    private static String hex(byte[] arr) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i             
关注
打赏
1665409997
查看更多评论
0.0493s