加密算法之SHA(SHA1、SHA256)
前言
本章讲解典型的加密算法SHA(SHA1、SHA256)
方法
1、概念
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。
SHA1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
SHA256是SHA2的一种,可产生256位的哈希值,较SHA1更加的安全。
2、SHA1加密原理
我们仍然以单词 China 为例,如何将其进行MD5加密呢?
第一步:首先将China单词转化为ASCII码的十六进制表示方式
China的十六进制为:43 68 69 6E 61
第二步:对得到的数据 4368696E61 进行填充和附加,使其能够被512整除。
对于任意长度的明文,SHA1的明文分组过程与MD5相类似,首先需要对明文添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。与MD5不同的是SHA1的原始报文长度不能超过2的64次方,另外SHA1的明文长度从低位开始填充。
第三步:将得到数据进行拆分,按照512位分块。SHA1有4轮运算,每一轮包括20个步骤(一共80步),最后产生160位摘要。
3、注意事项
与MD5相比,SHA1有以下优缺点:
最显著和最重要的区别是SHA1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA1则是2^160数量级的操作。这样,SHA1对强行攻击有更大的强度。相对的在相同的硬件上,SHA1的运行速度比MD5慢。
但是就目前的情况来看,SHA1也很容易被攻破,为了安全起见,可以选择诸如SHA256,SHA512等高强度的算法来提升安全性。
4、Java实现SHA1加密
package cn.edu.ccut;import java.security.MessageDigest;public class SHA1Test {public static String shaEncode(String inStr) throws Exception {MessageDigest sha = null;try {sha = MessageDigest.getInstance("SHA");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}byte[] byteArray = inStr.getBytes("UTF-8");byte[] md5Bytes = sha.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16) {hexValue.append("0");}hexValue.append(Integer.toHexString(val));}return hexValue.toString();}public static void main(String args[]) throws Exception {String str = "China";System.out.println("SHA1加密前:" + str);System.out.println("SHA1加密后:" + shaEncode(str));}
}
运行结果如下:
加密算法之SHA(SHA1、SHA256)相关推荐
- MD5,SHA-1,SHA-256摘要加解密
2019独角兽企业重金招聘Python工程师标准>>> /*** 对字符串加密,加密算法使用MD5,SHA-1,SHA-256,默认使用SHA-256** @param strSrc ...
- 乐鑫Esp32学习之旅 22 讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等,附带Demo;
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...
- MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别
转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...
- 快速计算文件的MD5/SHA1/SHA256等校验值(Windows/Linux)
从网络上下载文件,尤其是非常大的文件怎么确保文件准确无误呢? 通常网站提供文件时会同时提供该文件的校验值,如MD5,SHA1,SHA256等, 当文件下载完成后,计算它的校验值,如果和网站提供的一致, ...
- Java数据加密(MD5,sha1,sha256)
数据加密,是一门历史悠久的技术,指通过 加密算法和加密 密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文.它的核心是密码学.数据加密目前仍是 计算机系统对信息进行保护的一种最可靠 ...
- sha1 sha256 md5 crc32几种摘要签名算法的效率,及实现对比及分析
sha1/sha256/md5/crc32这几种算法都是目前比较常用的摘要算法,在我们实际开发中,经常会需要使用,我们该如何选择呢,哪个算法的速度更快呢? 我们选择了一个差不多1G大小的system. ...
- 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?
转载:http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码: [cpp ...
- Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值
Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值 命令格式如下: certutil -hashfile yourfilename MD5 certutil -hashfile ...
- Hash校验工具、MD5 SHA1 SHA256命令行工具
MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...
最新文章
- 模型评估方法和性能指标
- python 打包文件
- Linux系统之更改默认块大小
- 每天一个linux命令--定时启动
- Windows下编译和安装Boost库
- 使用zerorpc踩的第一个坑:
- 方舟服务器维护驯龙,方舟生存进化新手图文攻略 最详细的驯龙教程方法
- 三年期定期存款利率多少?
- 一个动态增长的栈实现
- 【转载】快速掌握一个语言最常用的50%
- 小米路由器mini 刷潘多拉固件教程
- 基于SSM实现的网上书城系统【附源码】(毕设)
- Java 编程技术中汉字问题的分析及解决
- WebRTC系列-H.264预估码率计算
- 不要先为别人着想。|什么是“社会位阶”?
- 很常用的倒计时脚本,可任意设置时…
- runtime是什么?
- 框架(Framework)
- Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式
- 拨开O2O闭环迷雾 透视BAT终极PK战
热门文章
- win7怎么开热点(win7怎么开热点)
- C/C++:实现象棋游戏
- 苹果ttc转ttf_ttf转ttc字体格式工具 ttctools
- Qt 在mac上使用证书签名并生成pkg安装包
- 雷达 -- 频谱历史介绍
- FCHD: A fast and accurate head detector快速准确的人头检测代码预测出来的边界框位置不准确的解决方法
- 外汇基础学习1:结售汇
- 初学Python之math模块在哪里?
- gcc: error: : No such file or directory
- linux批量修改文件名字