SHA算法原理与常用实现

看本文前,最好先看看之前的这一篇关于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 "";}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC算法原理与常用实现

看本文前&#xff0c;最好先看看之前的对于MD5算法和SHA算法的介绍。 本文目录定义常见应用场景1、linux客户端&#xff1a;SecureCRT2、Google身份验证器3、银联pos机终端原理java实现和使用定义 MAC&#xff08;Message Authentication Codes&#xff09;&#xff0c;是一种…

对称加密算法原理与常用实现

目录定义常用对称加密算法DES3DESAESPEB常用对称加密算法的java实现DES实现3DES实现AES实现PEB实现定义 原文通过加密秘钥生成密文&#xff0c;密文通过解密秘钥得到原文。 对于加密秘钥和解密秘钥是相同的算法&#xff0c;就叫对称加密算法。 常用对称加密算法 DES Data E…

面试 HTTP ,99% 的面试官都爱问这些问题

HTTP 和 HTTPS 的区别HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol)&#xff0c;HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范HTTP 主要内容分为三部分&#xff0c;超文本&#xff08;Hypertext&#xff09;、传输…

非对称加密算法 --- RSA签名算法

目录RSA原理RSA应用场景RSA加密场景RSA签名场景RSA加解密和签名算法的java实现RSA原理 通过一定的规则&#xff0c;生成公钥和私钥&#xff0c;公钥和私钥总是成对出现。 公钥可以公开出去&#xff0c;任何人都可以知道。 私钥只有自己知道。 RSA算法能保证&#xff0c;公钥加…

@JsonFormat失效解决

先说结论 JsonFormat失效&#xff0c;换成JSONField就好了 问题经过和原理 JsonFormat作为Date类型的属性值&#xff0c;返回前端格式化处理&#xff0c;很方便。 比如&#xff1a; JsonFormat(pattern "yyyy/MM/dd HH:mm:ss")private Date updateTime;返回给前端…

如何在摆摊经济中脱颖而出

最近&#xff0c;摆摊经济开始火了起来&#xff0c;于是各路诸侯纷纷举起大旗开始摆摊。我周围也不乏有亲朋好友蠢蠢欲动&#xff0c;有的甚至已经初有规模。但这波摆摊风是否真的可行&#xff0c;对谁可行&#xff0c;有哪些风口&#xff0c;有哪些坑&#xff0c;我们慢慢分析…

java 实现 生成短链接服务

java实现短链接转换服务 类似上图这种短信&#xff0c;对应的就是一个短链接。 看到原理也不难&#xff0c;于是先写个最简易版的玩玩&#xff0c;以后有需求了再补充吧 下面是一个简易版的短链接生成代码 搭个spring-boot服务&#xff0c;复制这两个controller&#xff0c;就…

[转载] --- Fastjson1.2.68版及以下全版本远程代码执行漏洞通告

再这样&#xff0c;真的要放弃fastjson了 【安全通告】Fastjson <1.2.68全版本远程代码执行漏洞通告 尊敬的腾讯云用户&#xff0c;您好&#xff01;近日&#xff0c;腾讯云安全运营中心监测到&#xff0c;Fastjson <1.2.68版本存在远程代码执行漏洞&#xff0c;漏洞被利…

[记录] --- safari浏览器对于yyyy-MM的坑

问题 后端给前端返回的带格式的日期类型时&#xff0c;很多时候都是yyyy-MM-dd格式的&#xff0c;在一般浏览器中都没问题&#xff0c;但safari浏览器就会出问题。 解决&#xff1a; 换成yyyy/MM/dd格式

数据库选型经验汇总

数据库选型 下面这些都是免费开源的。 暂且不考虑数据量&#xff0c;大致的选型方案。 一般分析型数据库&#xff0c;都是可以支持GB到TB级别。 上面的分类都不是一定的&#xff0c;只是大体上的推荐。具体还得结合实际场景调整。 数据处理大致可以分成两大类&#xff1a; 联…

excel导出经验

excel导出经验&#xff0c;供参考 数据量&#xff1a;1万以下 直接导出&#xff0c;正常在5秒内 数据量&#xff1a;1万-10万 直接导出&#xff0c;正常在10秒内 数据量&#xff1a;超过10万&#xff0c;建议多文件导出。 可使用多线程查询&#xff0c;比如一个线程查1万…

LeetCode删除排序数组中的重复项(Java实现)

原题&#xff1a; 给定一个排序数组&#xff0c;你需要在 原地 删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1: …

关于高考报志愿的一些规划建议

目录前言1、报志愿&#xff0c;选大学中国大学的档次报志愿的整体思路不同分数线的报志愿建议超出一本分数线100分以上超过一本分数线50分左右到100分刚刚超过一本分数线不到50分二本分数线超很多&#xff0c;但刚好没上一本分数线刚上二本分数线的三本分数线专科分数线选择大学…

RabbitMQ和Kafka选型用哪个

作为一个有丰富经验的微服务系统架构师&#xff0c;经常有人问我&#xff0c;“应该选择RabbitMQ还是Kafka&#xff1f;” 基于某些原因&#xff0c; 许多开发者会把这两种技术当做等价的来看待。的确&#xff0c;在一些案例场景下选择RabbitMQ还是Kafka没什么差别&#xff0c…

spring boot controller 增加指定前缀的两种方法

1、增加配置 server.servlet.context-path: /api 这种是最常见的&#xff0c;加上这个配置后&#xff0c;所有的url&#xff0c;必须带上/api的前缀&#xff0c;才能访问到该url 2、过滤拦截 这种是加上/api也可以访问&#xff0c;不加/api也可以访问&#xff0c;适合项目重…

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

错误记录:Current request is not a multipart request

springboot 报错&#xff1a;Current request is not a multipart request 这个一般是controller是带有上传文件的服务&#xff0c;类似RequestParam MultipartFile[] file 解决&#xff1a; 首先检查请求头中的Content-Type是否设置对&#xff0c;如果把Content-Type设置成a…

java 使用gzip压缩和解压 传输文件必备

java gzip 压缩解压工具类&#xff0c;开箱即用 gzip原理看我另外一篇介绍 压缩效果直接看图&#xff1a; package com.yeahmobi.datacheck.util;import java.io.*; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream;public class CompressUtil…

spring boot maven项目返回值乱码的解决方法

spring boot maven项目返回值乱码的解决方法 1、先看乱码效果&#xff1a; spring boot maven项目&#xff0c;返回值乱码&#xff0c;如下图&#xff1a; 控制台打印log乱码&#xff0c;如下图&#xff1a; 有swagger的话&#xff0c;swagger文档乱码&#xff0c;如下图&…

云服务和serverless

云服务中的一些基础概念 IaaS&#xff08;Infrastructure as a server&#xff09;基础设施即服务 基础设施就是物理服务器 云服务厂商把物理服务器搭好&#xff0c;直接卖云端服务器或者虚拟机 用户可以自己装系统&#xff0c;然后装软件等等 PaaS&#xff08;Platform as …