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

常见的 对称加密 算法主要有 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();
	}
}

测试结果如下:


产生长度为16的字节数组,一个字节=8个位,分为高8位和低8位,使用&15算法进行取低8位,使用>>>亦或算法和&15算法取高8位

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->选择导出的位置即可


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值