看本文前,最好先看看之前的这一篇关于MD5算法的介绍。
MD5算法原理与常用实现

本文目录

  • 定义
  • MD5和SHA-1的碰撞问题
  • 常见应用场景
    • 1、类似MD5的应用场景
    • 2、比特币
    • 3、https签名算法会用到
  • SHA-256算法原理
    • 1、填补信息
    • 2、拿到初始值
    • 3、真正的计算
  • java实现和使用

定义

SHA算法(Secure Hash Algorithm),又叫安全散列算法。
SHA算法是基于MD4算法的基础上,演变而来。
但SHA算法出生好,是美国国家安全局设计的。
SHA算法,是一个系列家族,包括SHA-1,SHA-2(SHA-224、SHA-256、SHA-384、SHA-512),括号中的四个通常被统称为SHA-2。
JDK中对SHA-1、SHA-256、SHA-384、SHA-512都有实现。
SHA-1的最终密码长度是160位。
SHA-256的最终密码长度是256位。
SHA-384的最终密码长度是384位。
SHA-512的最终密码长度是512位。
SHA算法,实际上也是一种消息摘要算法,这个和MD算法是类似的。

本文主要介绍SHA-256算法。
任意长度的消息文件,通过SHA-256算法加密,最终得到的密文都是256位(32字节),通常用一个长度为64的十六进制字符串来表示。

效果上,SHA算法,与MD5算法都差不多,主要特点都是不可逆。

MD5和SHA-1的碰撞问题

碰撞问题,就是指对于一个算法,由明文生成的密文,并不是唯一的,甚至可以人为的通过构造新的明文去得到指定的密文。对于能出现这种情况的算法,我们就说这个算法是有碰撞问题的,简单理解就是两个不同的明文,通过算法加密,却得到了同样的密文。

目前为止,MD5算法和SHA-1算法,都被证实了存在碰撞问题。
所以在安全性特别高的场景下,都不会用MD5算法和SHA-1算法,至少都用SHA-256算法了。

常见应用场景

1、类似MD5的应用场景

MD5的应用场景,SHA算法基本也都可以使用。

2、比特币

比特币中,挖矿算法其实就是SHA-256算法,矿工们根据不断修改随机数,不断的进行SHA-256运算,最终算的快的挖到矿。

3、https签名算法会用到

打开浏览器,以谷歌为例,查看任意一个整数的详情:
签名算法就是:带 RSA 加密的 SHA-256,如下图:

SHA-256算法原理

SHA家族的基本算法思想,都和MD5一样,先定义常量,然后循环计算,最后组装,不同的就是循环里面的计算方式。

1、填补信息

类似MD5

2、拿到初始值

MD5中有4个初始值,而SHA-256中,有8个。

h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

3、真正的计算

计算分为多次循环,每次循环,都是用ABCD和原文在第一步填补完的信息,进行计算,最终得到新的ABCD。最后将最后一次ABCD拼成字符串,就是最终的密文。
循环先分为主循环,每个主循环中又套有子循环。
主循环次数 = 原文长度/512。
子循环次数 = 64次。

我们看看单次子循环都做了什么:
下面是单次子循环真正的计算逻辑(这段实现摘自网友):

java实现和使用

其实看过上一篇MD5介绍的,就会发现,其实SHA的java实现,和MD5的java实现,几乎一模一样。
唯一的不同,就是MessageDigest.getInstance(“SHA”);这个方法中:
SHA-1算法的入参是SHA
SHA-256算法的入参是SHA-256
SHA-384算法的入参是SHA-384
SHA-512算法的入参是SHA-512
MD5的入参是MD5

public class SHA1Util {public static void main(String[] args) throws IOException {System.out.println(encodeString("123"));}public static String encodeString(String plainText) throws UnsupportedEncodingException {return encodeBytes(plainText.getBytes("UTF-8"));}public static String encodeBytes(byte[] bytes) {try {MessageDigest md = MessageDigest.getInstance("SHA");md.update(bytes);byte b[] = md.digest();int i;StringBuffer buf = new StringBuffer("");for (int offset = 0; offset < b.length; offset++) {i = b[offset];if (i < 0) {i += 256;}if (i < 16) {buf.append("0");}buf.append(Integer.toHexString(i));}return buf.toString();} catch (Exception e) {e.printStackTrace();}return "";}}

SHA算法原理与常用实现相关推荐

  1. MAC算法原理与常用实现

    看本文前,最好先看看之前的对于MD5算法和SHA算法的介绍. 本文目录 定义 常见应用场景 1.linux客户端:SecureCRT 2.Google身份验证器 3.银联pos机终端 原理 java实 ...

  2. MD5算法原理与常用实现

    目录 定义 MD5特点 常见应用场景 1.校验文件的完整性 2.存储用户密码 原理 1.填补信息 2.拿到初始值 3.真正的计算 MD5为什么不可逆 java实现和使用 定义 MD全称Message- ...

  3. [转载] URL短网址生成算法原理

    参考链接: URL 短地址Shorteners及其Python中的API 2 短网址(Short URL),是在形式上比较短的网址,通过映射关系跳转到原有的长网址. 本文转自米扑博客:URL短网址生成 ...

  4. scikit-learn机器学习常用算法原理及编程实战(五)

    决策树 决策树是最经典的机器学习模型之一.预测速度快,可以处理类别型数据和连续型数据.通过本章读者可以掌握以下内容: 信息熵及信息增益的概念,以及决策树的分裂的原则: 决策树的创建及剪枝算法: sci ...

  5. 算法总结---最常用的五大算法(算法题思路)

    算法总结---最常用的五大算法(算法题思路) 一.总结 一句话总结: [明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组] [最简实例分析:比如思考dijkstra:假设先只 ...

  6. Bagging与随机森林算法原理小结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boos ...

  7. 干货 | 非常全面的谱聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚 ...

  8. 层次聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...

  9. 从传感器到算法原理,机器人、视觉避障尽在此文

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 避障是指移动机器人在行走过程中,通过 ...

最新文章

  1. java action dao_java中Action层、Service层和Dao层的功能区分
  2. 回滚 - 每天5分钟玩转 Docker 容器技术(141)
  3. 新手学Python推荐的四本书籍+2个资源网站
  4. 单体预聚合的目的是什么_第七章 配位聚合
  5. android 动画卡顿分析工具
  6. java类方法不写权限就时default_Day11_final、权限、内部类
  7. css 居中50%,CSS中的translate(-50%,-50%)实现水平垂直居中效果
  8. 重磅!解读国内唯一入选全球顶会SIGCOMM的阿里云网络论文
  9. 飞控C语言开源,几大主流开源飞控平台优劣比较.doc
  10. 测试时的一些技巧及面试官的一些期望回答
  11. 按键控制le灯c语言程序,C语言按键控制led灯和蜂鸣器
  12. 各个小组对“躲避小球”游戏的评价
  13. vue2开发过程中el-select懒加载问题
  14. iOS简历这样写,才能找到好工作
  15. JSP学生奖学金系统JSP学生评奖评优系统JSP奖学金管理系统 JSP奖学金评定系统
  16. ESP32学习笔记(45)——DAC接口使用
  17. 基于Linux下 Oracle 备份策略(RMAN)---转自沙弥的世界
  18. 2013年9月计算机一级考试题,2013年9月计算机一级考试MsOffice备考题及答案2
  19. 【xml】xml命名空间的作用(为何mybatis的xml没有命名空间)
  20. UE4的JSON读写方式二

热门文章

  1. 花若盛開,蝴蝶自來。人若精彩,天自安排。
  2. Finished,saving caches...运行时卡顿问题的解决
  3. 15日柬埔寨和马来西亚“慢”游
  4. 2022年广州市施工员(土建)考试练习题及答案
  5. 五小时三万字之一篇博文带你学会SQL【期末数据库稳了】
  6. bat脚本 获取当前所在文件夹的路径
  7. 模糊推理及FuzzyPID算法详解及仿真
  8. 逻辑回归_sigmod函数
  9. Java--for循环之双层循环嵌套 执行流程
  10. 金蝶软件遭遇.locked勒索病毒攻击:如何保护与解救您的数据?