文档章节

消息摘要算法 - SHA

pan_1308
 pan_1308
发布于 2017/08/08 13:57
字数 357
阅读 24
收藏 0

1、概述

SHA 算法(安全散列算法)是基于 MD4算法基础之上的,作为 MD算法的继承者,成为了新一代的消息摘要算法的代表;其与 MD算法的不同之处主要在于摘要长度,SHA算法的摘要长度更长,安全性更高。

2、数据模型

3、两种实现方式

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.digest.DigestUtils;

public class SHACoder {

	public static void main(String[] args) {
	    String source = "信息摘要-test";
	    String encodeStr = encodeSHA128(source);
	    System.out.println(source + "-SHA-128 加密:" + encodeStr);
	    
	    System.out.println("-------------------------");
	    String ss = encodeCommonCodecSHA128(source);
	    System.out.println(source + "-commons codec SHA-128 加密:" + ss.toUpperCase());
	    /**console 结果:
	     * 信息摘要-test-SHA-128               加密:C12EEED1866319AD29E59DF55931A90D90177754
           -------------------------
           信息摘要-test-commons codec SHA-128 加密:C12EEED1866319AD29E59DF55931A90D90177754
	     */
	}
	
	/**
	 * SHA 128 位信息摘要
	 * @param source
	 * @return
	 */
	public static String encodeSHA128(String source){
		StringBuffer sb = new StringBuffer();
		try {
			MessageDigest md = MessageDigest.getInstance("SHA");
			byte[] b = md.digest(source.getBytes("utf-8"));
			
			for (int i = 0; i < b.length; i++) {  
		        sb.append(Integer.toHexString((b[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3));  
		    } 
			
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * SHA 256 位信息摘要
	 * @param source
	 * @return
	 */
	public static String encodeSHA256(String source){
		StringBuffer sb = new StringBuffer();
		try {
			MessageDigest md = MessageDigest.getInstance("SHA-256");
			byte[] b = md.digest(source.getBytes("utf-8"));
			
			for (int i = 0; i < b.length; i++) {  
		        sb.append(Integer.toHexString((b[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3));  
		    } 
			
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * Commons Codec 128位 信息摘要
	 * @param source
	 * @return
	 */
	public static String encodeCommonCodecSHA128(String source){
		String ss = null;
		try {
			ss = DigestUtils.sha1Hex(source.getBytes("utf-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return ss;
	}
	
	/**
	 * Commons Codec 256位 信息摘要
	 * @param source
	 * @return
	 */
	public static String encodeCommonCodecSHA256(String source){
		String ss = null;
		try {
			ss = DigestUtils.sha256Hex(source.getBytes("utf-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return ss;
	}
}

 

 

© 著作权归作者所有

pan_1308
粉丝 5
博文 95
码字总数 58819
作品 0
黄冈
私信 提问
C++ sha256加密(openssl库)

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

bobway
2015/10/30
7.6K
0
【Java小工匠聊密码学】--消息摘要--SHA算法

1、什么是SHA算法   安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是联邦信息处理标准(Federal Information Processing Standards,FIPS)所认证的安...

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

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

guitar_zp
2016/07/24
0
0
python之hashlib模块

hashlib模块 hashlib模块提供了很多加密的算法,该模块实现了许多不同的安全散列和消息摘要算法的通用接口。包括FIPS安全散列算法SHA1,SHA224,SHA256,SHA384和SHA512(在FIPS 180-2中定义...

东丶
2017/08/26
0
0
【Java小工匠聊密码学】--消息摘要--概述

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

追梦着
2018/06/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部