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

粤嵌打卡第33天(MD5加密工具类、SHA-1加密)

程序员文章站 2022-05-12 20:33:47
...
常见的 对称加密 算法主要有 DES、3DES、AES 等,常见的 非对称算法 主要有 RSA、DSA
等,散列算法 主要有 SHA-1、MD5 等。

今天我们用MD5来写一个常用的加密算法工具类吧!!!

1、MD5加密算法

  • 1、MD5简述

MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符,一个长为16的字节数组)。

public static final byte[] computeMD5(byte[] content) {
    try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        return md5.digest(content);
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException(e);
    }
}
  • 2、MD5工具类编写

代码如下:

package com.yueqian.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 * MD5加密算法 :无论明文多少位,密文都为16位的数组
 * SHA加密算法 :无论明文多少位,密文都为20位的数组
 * @author LinChi
 *
 */
public class MD5Utils {
	//定义将密文数组转换成16进制的数值
	private static String[] str= {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
	public static void main(String[] args) {
		System.out.println(getMd5Mes("12345"));
	}
	/**
	 * 常见加密算法:MD5 SHA
	 * 	明文    密文
	 * 	123   343ADFEBA2354
	 * 加密规则:(加密算法一样加密出来的密文一样)
	 * 1- 相同的明文必须加密成相同的密文
	 * 2- 不同的明文必须加密成不同的密文
	 * @param msg
	 * @return
	 */
	public static String getMd5Mes(String msg) {
		//定义存储密文的字符串缓冲器
		StringBuffer sb = new StringBuffer();
		try {
			//创建加密算法工具类,并且传入加密算法类型
			MessageDigest messageDigest = MessageDigest.getInstance("MD5");
			//将加密的明文赋值给机密工具类(明文必须使用字节数组来存储)
			messageDigest.update(msg.getBytes());
			//加密(返回密文的数组)
			byte[] resultDigest = messageDigest.digest();
			/**一个字节等于8个位,分为高4位与低4位
			 * 1byte = 8 bit
			 * 0000		0000
			 *   1        F(15)
			 */
			//循环遍历字节数组
			for(int i = 0;i<resultDigest.length;i++) {
				//得到每一个字节
				byte item = resultDigest[i];
				//取低4位(& 00001111,将取到低四位)
				int lowVal = item & 15;
				//取高4位(无符号右移4位,然后将得到的结果& 00001111,就可以将负数的最前面的符号为由1置为0)
				int hiVal = item>>>4 & 15;
				sb.append(str[hiVal]).append(str[lowVal]);
			}
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sb.toString();
	}
}

测试结果如下:

粤嵌打卡第33天(MD5加密工具类、SHA-1加密)
产生长度为16的字节数组,一个字节=8个位,分为高8位和低8位,使用&15算法进行取低8位,使用>>>亦或算法和&15算法取高8位
粤嵌打卡第33天(MD5加密工具类、SHA-1加密)

2、SHA1算法

  • SHA1算法简介:

SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要(产生一个长度为20的字节数组)。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。

示例代码:

public static byte[] computeSHA1(byte[] content) {
    try {
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        return sha1.digest(content);
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException(e);
    }
}

3、将工具类打成jar包,供项目使用

  • 右键工具类 -> Export ->jar File->选择导出的位置即可

粤嵌打卡第33天(MD5加密工具类、SHA-1加密)


好了,今天分享的内容就这么多了,关于其他加密算法等待下期再说吧!!!