加密算法解析二:SHA

这篇具有很好参考价值的文章主要介绍了加密算法解析二:SHA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

SHA全称Secure Hash Algorithm(安全Hash算法),是由美国NSA和NIST两个组织共同发布的一系列密码散列函数。SHA算法和上文介绍的MD5一样,是一种散列(Hash)算法,除了算法不一样,它返回值也长于MD5的128位二进制。

SHA算法由较多种,主要经历了SHA-0、SHA-1、SHA-2、SHA-3这几个阶段。目前常见的SHA算法有:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512,它们分别返回160、224、256、384、512位二进制,其中SHA-224、SHA-256、SHA-384、SHA-512一般称为SHA-2。至于SHA-0和SHA-3,SHA-0算法古老不安全几乎绝迹了,SHA-3相对于SHA-2可以说是一种全新算法,但返回值位数和SHA-2一样,它是SHA-2的备用并不是取代,目前主流还是使用SHA-2。

步骤

这里主要基于SHA-1介绍算法步骤,该算法也分为:补位、添加长度、初始化缓存、处理数据、输出这五个步骤,其中补位与添加长度与MD5一致,后面三个稍有不同。

1、补位:补位与添加长度与MD5一致,将最终位数补成对512求模的结果为448,即原文长度补位成只差64位(bit)就是512的整数倍,即使本身长度符合差64位就是512的倍数也要补一次512位,补位规则第一个补1,后面都补0。

2、添加长度:计算补位前的长度,取其二进制的64位,长度数值大于64位的取64位低位,比如长度为8,二进制表示为 1000,前面补60个0就是8的64位二进制表示了。最后消息就是为512的整数倍。

3、初始化缓存:SHA-1需要初始化4个32位的常数K以及5个32位的初始散列值H,这5个H就是初始化的摘要(160位)。K用16进制表示分别为:5A827999(0<=t<=19))、6ED9EBA1(20<=t<=39)、8F1BBCDC (40<=t<=59)、CA62C1D6 (60<=t<=79),H用16进制表示分别为:67452301、EFCDAB89、98BADCFE、10325476、C3D2E1F0。

4、数据处理:初始化常数后,则将K和H以及分组的原文进行循环运算,每次循环需要经过4个函数处理,具体函数如下:

sha加密解密,信息安全,网络安全,哈希算法,区块链,安全,Powered by 金山文档

5、输出:最终的5个H(32位)就是SHA1的输出,共160位二进制,转化为16进制输出就是40个字符。

优点

1、安全:相对于MD5来讲,SHA算法更安全,目前SHA-2还没出现碰撞。

2、对原文敏感:哪怕原文有一个二进制的变化,都会导致密文不同(雪崩效应)。

3、算法不可逆:知道密文除了穷举,基本无法可解密出原文。

缺点

1、加密速度慢:相对于MD5来讲,SHA算法更慢(大数据量下)。

2、碰撞:虽然已经主流使用了SHA-2算法,可以返回256位甚至512位结果,结果返回足够大,目前够用,但依旧是有限的结果,后续还是可能出现碰撞。

缺点解决方案

对于加密速度慢的缺点,小段信息比如普通的表单、密码等的加密时间几乎可以忽略不计,可以忽略这个缺点,若有大文件加密且速度慢建议用MD5。

对于碰撞问题或字典解密问题可以采用加盐解决,即使碰撞了。

使用场景

1、密码加密:对于用户的密码,肯定不希望被别人破解,一般会采用不可逆算法,原文也小,可以使用SHA-2算法加密。

2、信息签名:SHA和MD5一样对原文敏感,对于数据或文件的传输,可在传输前后都生成SHA密文来对比校验,来验证数据或文件是否损坏或修改。

目前一些比特币和CA证书就是使用SHA-256加密的。文章来源地址https://www.toymoban.com/news/detail-581695.html

到了这里,关于加密算法解析二:SHA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 哈希算法(hash)加密解密

    套路一样 hash_jiemi.py

    2024年02月13日
    浏览(42)
  • jasypt-spring-boot敏感信息加密解密利器使用指南

    Springboot 整合Jasypt,实现配置信息的安全,如数据库连接.账号和密码.接口凭证信息等。 Jasypt可以为Springboot加密的信息很多,主要有: System Property 系统变量 Envirnment Property 环境变量 Command Line argument 命令行参数 Application.properties 应用配置文件 Yaml properties 应用配置文件 other

    2024年02月03日
    浏览(51)
  • AES与DES加密解密算法

    AES(Advanced Encryption Standard,高级加密标准)的出现,是因为以前使用的DES算法密钥长度较短,已经不适应当今数据加密安 全性的要求,因此2000年10月2日,美国政府宣布将比利时密码学家Joan Daemen和Vincent Rijmen提出的密码算法RIJNDAEL作为高级加密标准。2001年11月26日,美国政府

    2024年04月28日
    浏览(48)
  • 基于混沌算法的图像加密解密系统

    项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义: 随着信息技术的迅猛发展,图像的传输和存储已经成为现代社会中不可或缺的一部分。然而,随着互联网的普及和信息的快速传播,图像的安全性问题也日益凸显。为了保护图像的机密性和完整性,

    2024年02月22日
    浏览(49)
  • RSA 加密解密算法实现(简单,易懂)!!!

    目录 一、什么是RSA算法 1.对称加密 2.非对称加密 3.非对称加密的应用 二、RSA算法的基础操作步骤 1.生成公钥和私钥 2.用公钥加密信息  3.用私钥解密信息 三、AC代码 六、RSA算法的测试  七、共勉     在计算机中常用的加密算法分为两类: 对称加密算法和非对称加密算法。

    2024年01月20日
    浏览(66)
  • .net中加解密用BouncyCastle就够了,支持常用的各种加密解密算法

    BouncyCastle 是一个流行的 Java 加解密库,也支持在 .NET 平台上使用。下面是 BouncyCastle 在 .NET 下使用的一些常见功能,包括 AES、RSA、MD5、SHA1、DES、SHA256、SHA384、SHA512 等。 在开始之前,请确保你已经将 BouncyCastle 的 NuGet 包安装到你的项目中。你可以通过 NuGet 包管理器控制台或

    2024年02月05日
    浏览(50)
  • C/C++ 常用加密与解密算法

    计算机安全和数据隐私是现代应用程序设计中至关重要的方面。为了确保数据的机密性和完整性,常常需要使用加密和解密算法。C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现。本文将介绍一些在C++中常用的加密与解密算法,这其中包括Xor异或、BASE64、

    2024年02月05日
    浏览(39)
  • DES加密解密 Feistel算法网络结构 详讲

    DES算法是属于对称密码算法中的分组加算法。 分组加密 和 流密码 加密是相对应的。 流密码 是逐字节进行加密,即一个字节一个字节进行加密 分组加密 算法也叫 块加密 ,将明文分成固定字节块,对每个字节块分别进行加密,最后拼接在一起得到密文 密钥长64位,56位参与运

    2024年02月16日
    浏览(37)
  • Java代码实现RSA算法加密解密文件功能

    底层算法不做赘述,想要了解自行百度。 RSA属于非对称加密,非对称加密有公钥和私钥两个概念,私钥自己拥有,不能给别人,公钥公开。根据应用的不同,我们可以选择使用不同的密钥加密: 签名:使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份

    2024年02月12日
    浏览(56)
  • C# .Net学习笔记—— 加密和解密算法

    1、MD5不可逆加密 2、Des对称可逆加密 3、RSA非对称可逆加密 4、数字证书SSL 调用 得出结果 * 通过上面结果可以得出规律 MD5可以得到一串定长的随机编码 传入的字符串或者文件相同,得到的编码是相同的 只要稍微有一点不同得到的MD5都是不同的 1、账号登陆,数据库内防止看

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包