文档章节

消息摘要算法

伊森papa
 伊森papa
发布于 2012/01/02 17:05
字数 362
阅读 445
收藏 0

文中代码用到codec和bouncycastle,需要加到classpath里。

其中md4和sha-244会用到bouncycastle。

MD系列:

 

package md;

import java.security.MessageDigest;
import java.security.Security;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class MD_Test {

	/**
	 * @param args
	 */
	public static void main(String[] args)  throws Exception {
		String str = "测试摘要算法";
		
		MD_Test mdTest = new MD_Test();
		byte[] data_md2 = mdTest.encodeMD2(str.getBytes());
		byte[] data_md5 = mdTest.encodeMD5(str.getBytes());
		byte[] data_md4 = mdTest.encodeMD4_bc(str.getBytes());
		
		System.out.println(str);
		System.out.println("md2="+Hex.encodeHexString(data_md2));
		System.out.println("md5="+Hex.encodeHexString(data_md5));
		System.out.println("md5_codec="+mdTest.encodeMD5_codec(str.getBytes()));
		System.out.println("md4_bc="+Hex.encodeHexString(data_md4));
		
		
	}
	
	public byte[] encodeMD2(byte[] data) throws Exception {
		//初始化MessageDigest
		MessageDigest md = MessageDigest.getInstance("MD2");
		//执行消息摘要
		return md.digest(data);
	}
	
	public byte[] encodeMD5(byte[] data) throws Exception {
		//初始化MessageDigest
		MessageDigest md = MessageDigest.getInstance("MD5");
		//执行消息摘要
		return md.digest(data);
	}
	
	public String encodeMD5_codec(byte[] data) throws Exception {
		return DigestUtils.md5Hex(data);
	}
	
	public byte[] encodeMD4_bc(byte[] data) throws Exception {
		//加入BouncyCastleProvider支持
		Security.addProvider(new BouncyCastleProvider());
		
		//初始化MessageDigest
		MessageDigest md = MessageDigest.getInstance("MD4");
		//执行消息摘要
		return md.digest(data);
	}

}

SHA系列:

 

package md;

import java.security.MessageDigest;
import java.security.Security;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class SHA_Test {
	
	public static void main(String[] args) throws Exception{
		String str = "测试摘要算法SHA";
		
		SHA_Test shaTest = new SHA_Test();
		byte[] data_sha = shaTest.encodeSHA1(str.getBytes());
		byte[] data_sha512 = shaTest.encodeSHA512(str.getBytes());
		byte[] data_sha224 = shaTest.encodeSHA224_bc(str.getBytes());
		
		System.out.println(str);
		System.out.println("SHA="+Hex.encodeHexString(data_sha));
		System.out.println("SHA_codec="+shaTest.encodeSHA_codec(str.getBytes()));
		System.out.println("SHA-512="+Hex.encodeHexString(data_sha512));
		System.out.println("SHA-224="+Hex.encodeHexString(data_sha224));
	}

	public byte[] encodeSHA1(byte[] data) throws Exception {
		//初始化MessageDigest
				MessageDigest md = MessageDigest.getInstance("SHA");
				//执行消息摘要
				return md.digest(data);
	}
	public byte[] encodeSHA512(byte[] data) throws Exception {
		//初始化MessageDigest
		MessageDigest md = MessageDigest.getInstance("SHA-512");
		//执行消息摘要
		return md.digest(data);
	}
	
	public String encodeSHA_codec(byte[] data) throws Exception {
		return DigestUtils.shaHex(data);
	}
	
	public byte[] encodeSHA224_bc(byte[] data) throws Exception {
		//加入BouncyCastleProvider支持
		Security.addProvider(new BouncyCastleProvider());
		
		//初始化MessageDigest
		MessageDigest md = MessageDigest.getInstance("SHA-224");
		//执行消息摘要
		return md.digest(data);
	}

}

© 著作权归作者所有

上一篇: 常用下载地址
伊森papa

伊森papa

粉丝 8
博文 23
码字总数 5193
作品 0
海淀
私信 提问
加载中

评论(4)

伊森papa
伊森papa

引用来自“马敬霞”的评论

就是我下载了这个包bouncycastle.jar,可是引入Hex这个类时是这个类:org.bouncycastle.util.encoders.Hex,跟你用到的那个不一样啊,是不是我下载jar错了啊?

我用的是org.apache.commons.codec.binary.Hex,在codec里。
马敬霞
就是我下载了这个包bouncycastle.jar,可是引入Hex这个类时是这个类:org.bouncycastle.util.encoders.Hex,跟你用到的那个不一样啊,是不是我下载jar错了啊?
伊森papa
伊森papa

引用来自“马敬霞”的评论

初学者,请问文中代码用到的codec和bouncycastle,codec在哪找到这个啊,我下载了bouncycastle这个jar包,怎么引入的包不对啊

codec是apache的,在apache-commons下。
bouncycastle的问题我没明白你的意思。
马敬霞
初学者,请问文中代码用到的codec和bouncycastle,codec在哪找到这个啊,我下载了bouncycastle这个jar包,怎么引入的包不对啊
【Java小工匠聊密码学】--消息摘要--概述

1、消息摘要概述   数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。...

追梦着
2018/06/10
0
0
[Java 安全]消息摘要与数字签名

消息摘要 算法简述 定义 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原...

guitar_zp
2016/07/24
0
0
【Java小工匠聊密码学】--消息摘要--HMAC算法

1、什么是HMAC   HMAC是密钥相关的消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。 2、HMAC用途     我们使用MD和SHA 消息摘要算法,可以保...

追梦着
2018/06/10
0
0
C++ sha256加密(openssl库)

安全散列算法 安全散列算法(英语:Secure Hash Algorithm)是一种能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的概...

bobway
2015/10/30
0
0
移动开发APK签名知识扫盲

签名的意义 签名主要用于表面开发者的身份和操作权利,在签署APK时,在签署 APK 时,签署工具会将公钥证书附加到 APK。公钥证书充当“指纹”,用于将 APK 关联到开发者。主要用途是在升级应用...

移动开发
2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

FPGA 设备 USB Platform Cable USB

lsusbFuture Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

MtrS
今天
4
0
lua web快速开发指南(6) - Cache、DB介绍

"数据库"与"缓存"的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 "数据库"是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中, 我们经常会用到文件柜、书桌等等数...

水果糖的小铺子
今天
7
0
Oracle分页查询语句的写法

Oracle分页查询语句的写法 Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,Oracle分页查询语句基本上可以按本文给出的格式来进行套用。   Oracle分...

康师傅
昨天
5
0
java并发图谱

1527
昨天
2
0
Mybatis之拦截器Interceptor

使用mybatis时用PageHelper进行分页,用到了PageInterceptor,借此了解下mybatis的interceptor。Mybatis的版本是3.4.6,MybatisHelper的版本是5.1.3。 1、PageInterceptor 先上一段代码,如下...

克虏伯
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部