前言

本章讲解典型的加密算法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)相关推荐

  1. MD5,SHA-1,SHA-256摘要加解密

    2019独角兽企业重金招聘Python工程师标准>>> /*** 对字符串加密,加密算法使用MD5,SHA-1,SHA-256,默认使用SHA-256** @param strSrc ...

  2. 乐鑫Esp32学习之旅 22 讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等,附带Demo;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  3. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  4. 快速计算文件的MD5/SHA1/SHA256等校验值(Windows/Linux)

    从网络上下载文件,尤其是非常大的文件怎么确保文件准确无误呢? 通常网站提供文件时会同时提供该文件的校验值,如MD5,SHA1,SHA256等, 当文件下载完成后,计算它的校验值,如果和网站提供的一致, ...

  5. Java数据加密(MD5,sha1,sha256)

    数据加密,是一门历史悠久的技术,指通过 加密算法和加密 密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文.它的核心是密码学.数据加密目前仍是 计算机系统对信息进行保护的一种最可靠 ...

  6. sha1 sha256 md5 crc32几种摘要签名算法的效率,及实现对比及分析

    sha1/sha256/md5/crc32这几种算法都是目前比较常用的摘要算法,在我们实际开发中,经常会需要使用,我们该如何选择呢,哪个算法的速度更快呢? 我们选择了一个差不多1G大小的system. ...

  7. 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?

    转载:http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码: [cpp ...

  8. Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值

    Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值 命令格式如下: certutil -hashfile yourfilename MD5 certutil -hashfile ...

  9. Hash校验工具、MD5 SHA1 SHA256命令行工具

    MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...

最新文章

  1. 模型评估方法和性能指标
  2. python 打包文件
  3. Linux系统之更改默认块大小
  4. 每天一个linux命令--定时启动
  5. Windows下编译和安装Boost库
  6. 使用zerorpc踩的第一个坑:
  7. 方舟服务器维护驯龙,方舟生存进化新手图文攻略 最详细的驯龙教程方法
  8. 三年期定期存款利率多少?
  9. 一个动态增长的栈实现
  10. 【转载】快速掌握一个语言最常用的50%
  11. 小米路由器mini 刷潘多拉固件教程
  12. 基于SSM实现的网上书城系统【附源码】(毕设)
  13. Java 编程技术中汉字问题的分析及解决
  14. WebRTC系列-H.264预估码率计算
  15. 不要先为别人着想。|什么是“社会位阶”?
  16. 很常用的倒计时脚本,可任意设置时…
  17. runtime是什么?
  18. 框架(Framework)
  19. Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式
  20. 拨开O2O闭环迷雾 透视BAT终极PK战

热门文章

  1. win7怎么开热点(win7怎么开热点)
  2. C/C++:实现象棋游戏
  3. 苹果ttc转ttf_ttf转ttc字体格式工具 ttctools
  4. Qt 在mac上使用证书签名并生成pkg安装包
  5. 雷达 -- 频谱历史介绍
  6. FCHD: A fast and accurate head detector快速准确的人头检测代码预测出来的边界框位置不准确的解决方法
  7. 外汇基础学习1:结售汇
  8. 初学Python之math模块在哪里?
  9. gcc: error: : No such file or directory
  10. linux批量修改文件名字