Java实现消息摘要算法加密

本文深入解析了消息摘要算法,包括MD、SHA、MAC等核心算法,探讨了它们在数据完整性和数字签名中的应用,以及在用户认证、浏览器证书验证等场景下的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、消息摘要算法

MD(Message Digest)

SHA(Secure Hash Algorithm)

MAC(Message Authentication Code)

以上三个都是:验证数据完整性

数字签名核心算法

二、消息摘要算法-MD

MD5

MD家族(128位摘要信息)

            -MD2、MD4

算法

摘要长度

实现方

MD2

128

JDK

MD4

128

Bouncy Castle

MD5

128

JDK

代码:

package com.jl.mdshamac;

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

import org.apache.commons.codec.binary.Hex;

/**
 * md2和md5是由jdk提供的,以下为例子
 * md2和md5 为hash算法,方法不可逆,没有提供解密方法(自己写解密算法)
 * @author jinlong
 *
 */
public class Md2orMd5 {
	
	static String src = "i love code";
	
	public static void main(String[] args) {
		jdkMd2();
		jdkMd5();
	}

	private static void jdkMd2() {
		try {
			MessageDigest md = MessageDigest.getInstance("md2");
			byte[] md2bytes = md.digest(src.getBytes());
			String encode = Hex.encodeHexString(md2bytes);
//			System.out.println("JDK MD2 encode " + new String(md2bytes));	这样不行,要转为16进制字符串
			System.out.println("JDK MD2 encode " + encode);
//			byte[] md2bytes_decode = md.digest(encode.getBytes());
//			System.out.println("JDK MD2 decode " + new String(md2bytes_decode));
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void jdkMd5() {
		try {
			MessageDigest md = MessageDigest.getInstance("md5");
			byte[] md5bytes = md.digest(src.getBytes());
			String encode = Hex.encodeHexString(md5bytes);
			System.out.println("JDK MD5 encode " + encode);
//			byte[] md5bytes_decode = md.digest(encode.getBytes());
//			System.out.println("JDK MD5 decode " + new String(md5bytes_decode));
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
}

应用

用户注册功能

(1)用户注册(2)应用服务器对密码进行消息摘要(3)数据库信息持久化(4)返回注册结果

用户登录

(1)用户登录(2)应用服务器对密码进行消息摘要(3)数据库通过用户名及摘要查询(4)返回登录结果

三、消息摘要算法-SHA         

安全散列算法

固定长度摘要信息

SHA-1、SHA2(SHA-224、SHA-256、SHA-384、SHA-512)(由md4引变而来)

算法

摘要长度

实现方

SHA-1

160

JDK

SHA-224

224

Bouncy Castle

SHA-256

256

JDK

SHA-384

384

JDK

SHA-512

512

JDK

代码:

package com.jl.mdshamac;

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

import org.apache.commons.codec.binary.Hex;

/**
 * 关于sha-1
 * @author jinlong
 *
 */
public class SHA1jdk {
	
	static String src = "i love code";
	
	public static void main(String[] args) {
		jdkSHA1();
	}

	private static void jdkSHA1() {
		MessageDigest md;
		try {
			md = MessageDigest.getInstance("sha");
			md.update(src.getBytes());
			System.out.println("jdk sha-1:" + Hex.encodeHexString(md.digest()));
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

应用

浏览器证书

消息摘要算法-SHA 应用(SHA算法消息传递)

发送方:1.公布消息摘要算法 2.对待发布消息进行摘要处理 3.发布摘要消息 4.发送消息

接收方:消息鉴别

消息鉴别是指在接受方将原始信息进行摘要,然后与接受到的摘要信息进行对比

应用例子

  1. 加入约定key
  2. 增加时间戳
  3. 排序

http://**?msg=12Hsad74mj&timestamp=1309488734

msg:原始消息+key+时间戳

四、消息摘要算法-MAC

MAC(Message Authentication Code)

HMAC(keyed-Hash Message Authentication Code)

含有密钥的散列函数算法

融合MD、SHA

应用如SecureCRT

算法

摘要长度

实现方

HmacMD2

128

Bouncy Castle

HmacMD4

128

JDK

HmacMD5

128

JDK

HmacSHA1

160

Bouncy Castle

HmacSHA224

224

Bouncy Castle

HmacSHA256

256

JDK

HmacSHA384

384

JDK

HmacSHA512

512

JDK

代码:

package com.jl.mdshamac;

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

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Hex;

/**
 * mac进行消息摘要
 * @author jinlong
 *
 */
public class Macjdk {
	
	private static String src = "i love code";
	
	public static void main(String[] args) {
		jdkHmacMD5();
	}

	private static void jdkHmacMD5() {
		try {
			KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");//初始化KeyGenerator
			SecretKey secretKey = keyGenerator.generateKey();	//产生密钥
			byte[] key = secretKey.getEncoded();		//获得密钥
			
			SecretKey restoreSecretKey = new SecretKeySpec(key,"HmacMD5");	//还原密钥
			Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());		//实例化mac
			mac.init(restoreSecretKey);					//初始化mac
			byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());	//执行摘要
			System.out.println("jdk HmacMD5: " + Hex.encodeHexString(hmacMD5Bytes));
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

应用

发送方:1.公布消息摘要算法 2.构建密钥 3.发送密钥 4.对待发消息进行摘要处理 5.发送消息摘要 6.发送消息

接受方:消息鉴别

五、消息摘要算法-其他

RipeMD

Tiger

Whirlpool

GOST3411

Bouncy Castle实现

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值