`

Java密码学(2)——消息摘要算法

 
阅读更多

消息摘要算法是为了验证数据的完整性。通过摘要算法可以获得对应的唯一的“消息摘要”或“数字指纹”,但不能通过该“消息摘要”反推出原始值。

 

3大消息摘要算法:

MD算法:MD2、MD4、MD5

SHA算法:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512

MAC算法:HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512

 

  • MD5算法

采用commons-codec实现,代码如下

	/**
	 * MD5消息摘要
	 * @param data
	 * @return
	 */
	public static String MD5encode(String data) {
		return DigestUtils.md5Hex(data);
	}

 测试代码

String data = "yeliang";
System.out.println("原文:"+data);

String md5 = MD5encode(data);
System.out.println("MD5消息摘要:"+md5);

 运行结果

原文:yeliang
MD5消息摘要:f9dde79b300661be269b0847511dac0c

 

  • SHA1算法

采用commons-codec实现,代码如下

	/**
	 * SHA1消息摘要
	 * @param data
	 * @return
	 */
	public static String SHA1encode(String data) {
		return DigestUtils.sha1Hex(data);
	}

 测试代码

String data = "yeliang";
System.out.println("原文:"+data);

String sha1 = SHA1encode(data);
System.out.println("SHA1消息摘要:"+sha1);

 运行结果

原文:yeliang
SHA1消息摘要:f4fdc278cca011e1fbb80811e85816b35c735f35

 

  • HmacMD5

实现代码

                /**
	 * 生成HmacMD5算法的密钥
	 * @return
	 */
	public static String HmacMD5KeyGenerate() {
		try {
			KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
			SecretKey secretKey = keyGenerator.generateKey();
			return Hex.encodeHexString(secretKey.getEncoded());
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * HmacMD5算法计算MAC
	 * @param key
	 * @param data
	 * @return
	 */
	public static String HmacMD5encode(String key, String data) {
		try {
			SecretKey secretKey = new SecretKeySpec(Hex.decodeHex(key.toCharArray()), "HmacMD5");
			Mac mac = Mac.getInstance(secretKey.getAlgorithm());
			mac.init(secretKey);
			byte[] macByte = mac.doFinal(Hex.decodeHex(data.toCharArray()));
			return Hex.encodeHexString(macByte);
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (DecoderException e) {
			e.printStackTrace();
		}
		return null;
	}

测试代码

String hmacMD5Key = HmacMD5KeyGenerate();
System.out.println("HmacMD5密钥:"+hmacMD5Key);	
String hmacMD5 = HmacMD5encode(hmacMD5Key, "404142434445464748494a4b4c4d4f");
System.out.println("HmacMD5生成MAC:"+hmacMD5);

 运行结果

HmacMD5密钥:32639241ecd1613c8274dd236fc0005839c34ca17d41797c71ac55a1986fee2779b79901cec7fde91676228a8ffa6ad845d59d97bfcd8a1ff9cc09cfb41f67f2
HmacMD5生成MAC:aaeb13481292f82fe7e5ec6ee7b7bf3a

 注意:MAC算法是一种有密钥的消息摘要算法,密钥和数据必须是HexString

  

  • CRC算法

CRC——Cyclic Redundancy Check,循环冗余校验。根据数据产生简短固定位数的一种散列函数,主要用来校验或检测数据传输后出现的错误。

常用件的CRC算法是CRC32算法,循环冗余校验值是32位的二进制,也就是4字节数据。

 

CRC32算法实现代码

        /**
	 * CRC32算法
	 * @param data
	 * @return
	 */
	public static String CRC32code(String data) {
		CRC32 crc32 = new CRC32();
		try {
			crc32.update(Hex.decodeHex(data.toCharArray()));
			String hex = Long.toHexString(crc32.getValue());
			return hex;
		} catch (DecoderException e) {
			e.printStackTrace();
		}
		return null;
	}

 测试代码

String data = "3132333435363738";
String crc32 = CRC32code(data);
System.out.println("原文:"+data);
System.out.println("CRC-32:"+crc32);

 运行结果

原文:3132333435363738
CRC-32:9ae0daaf

 

分享到:
评论

相关推荐

    Java密码学(5)——数字签名算法

    NULL 博文链接:https://ye-liang.iteye.com/blog/2002828

    东南大学密码学实验——Diffie-Hellman密钥协商算法

    此资源包含完整代码和完整实验报告(加上你的学号姓名即可提交)

    java源码包2

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    java源码包---java 源码 大量 实例

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    JAVA上百实例源码以及开源项目源代码

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    java源码包4

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    java源码包3

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    JAVA上百实例源码以及开源项目

    摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    “第3篇算法高级应用篇”讲解了算法的一些高级应用技术,包括在密码学和数据压缩/解压缩中的应用。 《C/C++常用算法手册》知识点覆盖全面、结构安排紧凑、讲解详细、示例丰富。《C/C++常用算法手册》对每一个知识点...

    java代码-使用java生成一个固定位数的随机字符串,并加密,和用户密码加密后的密文组合的源代码

    java代码-使用java生成一个固定位数的随机字符串,并加密,和用户密码加密后的密文组合的源代码 ——学习参考资料:仅用于个人学习使用!

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    基于Misty1算法的加密软件(JAVA)的实现(源代码+论文)

    信息安全的最大特点之一是自主性,因而其核心技术——密码学的研究与开发应当是一种本土性的科学。对于有些产品,可以通过外方引进来解决由于技术落后而带来的问题。然而对于安全产品,除非能完全确信它在硬件和软件...

    如何学习ACM,看后受益匪浅

    素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。 3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. 修改密码 说明:修改用户密码一般有两种方式,一种是通过命令password修改,另一种是通过语句alter user实现,如果要修改他人的密码,必须要具有相关的权限才可以 用法: 方式一 password [用户名] 方式二 alert...

Global site tag (gtag.js) - Google Analytics