百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Java加密与解密之消息摘要算法2

toyiye 2024-06-21 19:13 13 浏览 0 评论

上一篇介绍了MD及SHA,接下来我们来说说MAC算法。MAC只要就是加入了密钥。

上一篇:Java加密与解密之消息摘要算法

MAC:Message Authentication Code,消息认证码算法。

MAC算法结合了MD5和SHA算法的优势,加入了密钥的支持,是一种更加安全的消息摘要算法。

MAC兼容了MD和SHA算法的特性,并在此基础上加入了密钥, 因为MAC算法融合了密钥散列函数通常我们也把MAC称为HMAC(keyd-Hash Message Authentication Code)。

MD系列:HmacMD2,HmacMD4,HmacMD5三种算法;

SHA系列:HmacSHA1,HmacSHA224,HmacSHA256,HmacSHA384,HmacSHA512五种算法。

HMAC生成的摘要信息长度与使用的MD或是SHA是对应的。如:HmacSHA256使用这个算法那生成的摘要信息长度就是256个字节。

JDK8支持的算法:

HmacMD5,HmacSHA1,HmacSHA256,HmacSHA384,HmacSHA512


HmacMD2,HmacMD4,HmacSHA224这三种不支持,只用使用第三方库BC(Bouncy Castle)

代码示例:




package com.pack.security.mac;

import java.nio.charset.Charset;
import java.util.Base64;

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

public class HmacSHA1 {
	
	// 算法
	private static final String ALGORITHM = "HmacSHA1" ;
	
	/**
	 *	<p>
	 *     初始化HmacSHA1密钥
	 *  </p>
	 *	2020年10月8日 下午2:55:38
	 *	@author xg
	 *	@return byte[] 生成的密钥信息
	 *	@throws Exception
	 */
	public static byte[] initHmacSHA1Key() throws Exception{
		// 初始化KeyGenerator密钥生成器
		KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM) ;
		// 产生密钥
		SecretKey secretKey = keyGenerator.generateKey() ;
		// 获取密钥
		return secretKey.getEncoded() ;
	}
	
	/**
	 *	<p>
	 *     HmacSHA1 消息摘要
	 *  </p>
	 *	@author xg
	 *	@param data 要加密的数据
	 *	@param key 密钥信息
	 *  @return byte[] 摘要信息
	 *	@throws Exception
	 */
	public static byte[] encodeHmacSHA1(byte[] data, byte[] key) throws Exception {
		// 还原密钥
		SecretKey secretKey = new SecretKeySpec(key, ALGORITHM) ;
		// 实例化MAC
		Mac mac = Mac.getInstance(secretKey.getAlgorithm()) ;
		// 初始化mac
		mac.init(secretKey) ;
		// 返回消息摘要
		return mac.doFinal(data) ;
	}
	
	public static String hex(byte[] digest) {
		StringBuilder sb = new StringBuilder() ;
		for (byte b : digest) {
			String str = Integer.toHexString(b & 0xff) ;
			if (str.length() < 2) {
				sb.append("0" + str) ;
			} else {
				sb.append(str) ;
			}
		}
		return sb.toString() ;
	}
	public static void main(String[] args) throws Exception {
		String message = "我是HmacSHA1算法" ;
		byte[] key1 = initHmacSHA1Key() ;
		String strKey1 = Base64.getEncoder().encodeToString(key1) ;
		byte[] messageDigest1 = encodeHmacSHA1(message.getBytes(Charset.forName("UTF-8")), key1) ;
		String strDigest1 = hex(messageDigest1) ;
		System.out.println(strDigest1) ;
		
		byte[] key2 = Base64.getDecoder().decode(strKey1.getBytes()) ;
		byte[] messageDigest2 = encodeHmacSHA1(message.getBytes(Charset.forName("UTF-8")), key2) ;
		String strDigest2 = hex(messageDigest2) ;
		System.out.println(strDigest2) ;
		
		System.out.println(strDigest1.equals(strDigest2)) ;
	}
}


笔者曾经在一个项目中使用过该算法。当时是有很多的厂商要和我们系统对接,为了安全我们给每一个厂商提供一个密钥,然后厂商按照我们的约定对所有的入参进行签名,我们系统进行安全验证。

其它的算法这里就不演示了,针对自己使用的JDK版本看是否支持你所需要的算法即可,基本上BC支持了我们熟知的所有加解密算法。

到此我们对消息摘要算法进行了简单的介绍和使用。后续还会对对称加密和非对称加密及数字签名算法进行介绍。

相关推荐

python数据预处理技术(python 数据预处理)

在真实世界中,经常需要处理大量的原始数据,这些原始数据是机器学习算法无法理解的。为了让机器学习算法理解原始数据,需要对数据进行预处理。我们运行anaconda集成环境下的“jupyternotebo...

【Python可视化系列】一文教你绘制不同类型散点图(理论+源码)

这是...

OpenCV-Python 特征匹配 | 四十四

目标在本章中,我们将看到如何将一个图像中的特征与其他图像进行匹配。我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器Brute-Force匹配器的基础蛮力匹配器很简单。它使用第一...

实战python中Random模块使用(python中的random模块)

一、random模块简介Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。要在Python中使用random模块,只需要...

Python随机模块22个函数详解(python随机函数的应用)

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。平时数据分析各种分布的数据构造也会用到。random模块,用于生成伪随机数,之所以称之为伪随机数,是...

说冲A就冲A,这个宝藏男孩冯俊杰我pick了

爱奇艺新上架了一部网剧叫《最后一个女神》。有个惊人的发现,剧里男三居然是《青春有你》的训练生冯俊杰。剧组穷,戏服没几件,冯俊杰几乎靠一件背背佳撑起了整部剧。冯俊杰快速了解一下。四川人,来自觉醒东方,人...

唐山打人嫌犯陈继志去医院就医的背后,隐藏着三个精心设计的步骤

种种迹象表明,陈继志这帮人对处理打人之后的善后工作是轻车驾熟的,他们想实施的计划应该是这样的:首先第一步与伤者进同一家医院做伤情鉴定,鉴定级别最好要比对方严重,于是两位女伤者被鉴定为轻伤,他们就要求医...

熬夜会造成神经衰弱,别再熬夜了(熬夜会加重神经衰弱吗)

长时间熬夜会出现神经衰弱,皮肤受损,超重肥胖,记忆力下降等现象……熬夜了能补回来吗?每天少睡一两个小时算熬夜吗?必须上夜班怎么办?如何减少熬夜伤害?戳图转给爱熬夜的TA!via央视新闻来源:河北省文...

落叶知秋的图片爬取(落叶知秋的图片有哪些?)

importrequestsfrombs4importBeautifulSoupimporttimeimportjsonpathimportjsonfromurllib.parsei...

小心有毒!长沙海关查获藏匿在“巧克力威化涂层”中的大麻

来源:海关发布近日,长沙黄花机场海关对一票申报为“巧克力威化涂层”的进境快件进行机检查验时,在包裹内查获封装于各独立威化饼干包装袋中的大麻230克。另从其他申报为“巧克力、儿童早餐谷物”的快件中查获藏...

钧正平:编造传播这种谣言,荒谬(钧正公司)

来源:钧正平工作室官方微博【钧评编造传播这种谣言,荒谬!】目前,乌克兰安全形势还在迅速变化之中,各方面安全风险上升。相关事件网上热度极高,倍受瞩目。然而,有一些人却借机大肆制造散播一些低级谣言,比如...

幸运角色过去了,谈一谈DNF起源的元素

总的来说伤害比上个版本强太多了,打卢克每日和团本明显能感觉的到。目前打团B套+圣耀稍微打造下应该都能随便二拖了。组队基本上都是秒秒秒(以前得强力辅助,现在随便带个毒奶都行)。单刷除了王座和顶能源阿斯兰...

DNF元素超大凉打桩测试(把括号的伤害加起来好像比较正常)

最近修练场的二觉老是很奇怪,发现以前都是习惯性先减抗然后丢二觉,结果伤害。。。直接丢二觉就正常了下面是其他技能伤害,没达到BUG线,估计问题不大。装备打造方面:全身红字加起来353(41*5+74*2...

ANSYS接触和出图技巧(ansys rough接触)

1.ANSYS后处理时如何按灰度输出云图?1)你可以到utilitymenu-plotctrls-style-colors-windowcolors试试2)直接utilitymenu-plotctr...

ANSYS有限元使用经验总结-后处理(4)

28.求塑性极限荷载时,结构的变形应该较大,建议把大变形打开。...

取消回复欢迎 发表评论:

请填写验证码