1 MD5

1.1 算法定义

  • MD5的全称为 Message-Digest Algorithm,是一种被广泛使用的单向散列函数、属于Hash算法中一种比较重要算法——具有单项加密加密结果唯一安全性能好等优点。
  • MD5算法可以产生出一个128位(16字节)的散列值(哈希值),用于确保信息传输完整一致;以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

  • 2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

  • 对于任意长度的消息,这个摘要相当于是个长度为16个字节的数组,通常用一个长度为32的十六进制字符串来表示。

  • MD5是一种算法,通常用于在数据库中存储密码

在在Internet初期,网站主要将密码以明文形式保存在数据库中,然而这并不安全,因此人们使用MD5来混淆数据库中的密码。

MD5信息摘要算法可以从任何密码,短语或文本中生成32个字符的十六进制字符串,比如:如果用户的密码是654321,那在数据中就会生成 c33367701511b4f6020ec61ded352059 这样的字符串。因此,IT人员就看不到用户的密码,如果有人偷了数据库,就不会直接获得所有密码。

  • MD5在线解密的原理与步骤

MD5本身不可逆,但仍然有一些网站声称支持在线解密MD5码。

MD5解密主要是用于攻防演练或网络安全测试,在对网站入侵过程中,获得了管理员或者其他用户账号和密码值。

现在网上有很多流行的MD5在线解密平台和解密工具,其作用也是针对用户密码,或比较简单的密文进行解密,方法是将常用字符串的MD5密码保存到数据库,然后再与待解密的字符串做对比,最终找到匹配的源码。下图是MD5在线加密解密平台流程图:

1.2 MD5算法不安全的原因

1.2.1 字典表很大

在网上有很多md5解密网站(如:https://md5.cn/),就如同一个字典表。通过在数据库存储很多常用的密码,可以在很短的时间内查找任何哈希值的答案。这种数据库占用大量的磁盘空间,具有一定的成功率。在计算机安全领域,一些朋友需要用到MD5解密网站,通过这类型的网站,可以提高工作效率,大家可以去试试。

1.2.2 碰撞

安全的算法具有良好的抗冲突性。

也就是说:对于不同的数据输入,获得相同哈希值的可能性比较低,但是MD5的抗冲突性较低。

1.2.3 暴力攻击速度很快

蛮力攻击是通过尝试多种可能性来查找密码的一种方法,即可以猜测用户可能使用的东西(出生日期,孩子的名字,宠物的名字等),也可以尝试一切(从a,b, c到10个字符的特殊字符密码)。抵御暴力攻击的唯一方法可能是密码长度,如果您拥有40个字符长的随机密码(带有特殊字符),那么目前你的密码可能是安全的。

1.3 MD5不安全,可采取什么方法来提高安全性?

使用长密码

强制用户使用更长的密码(可能是15个字符或更多),此外还可以增加密码的复杂度,以确保他们使用的是大写,小写和特殊字符。但是,人们经常会使用弱密码。因此,很容易被猜到,更糟糕的是,有的人甚至在便签纸上记录密码。

用盐

尝试做的第一件事就是在加密密码时使用salt,基本上,盐是您在每个密码之前和/或之后添加的单词。如果盐是“ randomsaltformypassword”,并且用户选择“ 654321”作为密码,则将“ randomsaltformypassword654321”用作MD5功能参数。

这样,你就可以在数据库中加密更长的密码,并且黑客很难找到相应的密码,请确保选择长字样以充分提高安全性。

使用其他哈希函数

最好的解决方案可能是使用其他加密算法(如:SHA256、...)。

虽然这可能不是最简单的方法,因为这可能涉及更改数据库结构,但这可能是最安全的方法。

2 SHA1

SHA1是一种密码散列函数,可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

该算法输入报文的长度不限,产生的输出是一个160位的报文摘要。

输入是按512 位的分组进行处理的。

SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。

3 SHA256

3.1 算法定义

SHA256 算法 (Secure Hash Algorithm 256)

  • 一种具有确定性的单向哈希函数/单向散列函数(deterministic , one-way , hash , function)

  • 256代表最终的哈希值摘要是固定长度256位

    • 哈希值通常用一个长度为64的十六进制字符串(由随机字母和数字组成的)来表示,相当于是个长度为32个字节的数组,其中1个字节=8位。即无论明文大小如何,哈希值始终为256 位。
    • 例如:"爱我中华2023" (UTF-8编码) 通过 SHA256运算后,可得其输出的摘要
2959c3680fb764ba020aacfd06818f7aaffa7a9133c4864ba98a1ab3239b71ba

简言之,SHA 256通过将消息和文件等数据转换为固定长度为256位的、且难以区分的字符串来保护数据不被截取或篡改。几乎各行各业都会使用SHA256算法,包括政府机构和区块链等创新技术。

  • 数据指纹:输入的数据长度是任意的,输出的数据长度是固定的。可将其输出理解为原数据的数据指纹

    • 它具有确定性特征。同一输入值,总能得到相同的输出值。
    • SHA256是指输出长度为256位的安全、哈希算法。

3.2 算法特点

3.2.1 (输入)消息长度

输出具有固定大小,但输入没有大小限制。

3.2.2 (输出)摘要长度

  • 摘要长度消息摘要(即将加密哈希函数应用于数据的哈希值)长度应为 256 位。

在您的服务器上安装 SSL 证书时,您可以选择SHA-512或更大的摘要。

虽然SHA-512更安全,但不建议将其用于大多数系统,因为它需要更强大计算能力和计算机性能。

3.2.3 单向性(不可逆性)

所有哈希函数(例如 SHA 256)在设计上都是不可逆的。

对于每个输入,您只有一个输出,但反之则不然。多个不同的输入可能产生相同的输出。

  • 单向性(不可逆性)

    • 单向代表了函数很难逆推。

      • 有些函数很容易逆推,如:function y = x + 30(只需-30,就可以逆推回输入数据x)
      • 但如果你要逆推两个大素数的乘法公式,则很难

3.2.4 运算性能高

  • 基于本函数进行运算,以现有计算机算力,支持每秒运算6千亿亿次以上。

    • 其他函数,如 傅里叶变换函数等是无法达到这种运算量级的。

3.3 算法应用

SHA 256 是用于数字签名验证、SSL 握手、密码保护和许多其他安全相关操作的标准哈希算法。

3.3.1 简单Demo

现在请看哈希函数是如何工作的真实示例。假设您写了“便宜SSL证书”的消息并对其应用 SHA-256 哈希函数,将会得到:

3868401EDD8E4AE2F804AC3A6215C5EC522AE032F59C13296C1A25CAE4F26C52

现在,我们在消息末尾添加一个感叹号:“便宜SSL证书!”,并生成输出。结果则是这样:

EE39F1A692558947B80109483AF80ACC1E3722D533B7A9E7713E823F6E2D2A57

如您所见,仅添加一个字符,哈希值长度保持不变,但是得到的结果完全不同,这也就是为什么sha256比较安全的原因。

如果您要将此消息发送给朋友,则需提供哈希值并指定算法。

您的朋友会在他们的那端验证哈希值,如果匹配,他们就会知道该消息是真实的。

3.3.2 数字签名验证

数字签名是一种电子签名,用于验证消息(例如电子邮件、信用卡交易或电子文档)的真实性和完整性。它是通过散列文件,并使用 PKI(公钥基础设施)对其进行加密而创建的。

SHA 256算法在整个过程中的作用是保证数字签名的完整性。接收方的客户端检查自己端的哈希算法,并使用公钥对消息进行解密。如果匹配,则数据是真实有效、未被篡改。

3.3.3 SSL握手 & SSL证书(HTTPS)

  • SSL 握手Web浏览会话的关键元素,它依赖于SHA算法功能。通过SSL/TLS的通信总是从SSL握手开始,这是一种非对称加密技术,允许浏览器验证web服务器,获得公钥,并在数据传输开始之前建立一个安全连接。

  • 无论数字证书品牌、价格和类型如何,所有SSL证书的通用规范是采用SHA 256算法,您可以在证书详细信息或产品信息中列出的功能中看到。

  • 根据用于监控 SSL/TLS 支持质量的全球仪表板SSL Pulse称,Alexa全世界最受欢迎的网站列表中,有97.2%的网站使用 SHA-256 算法的SSL证书。

3.3.4 密码保护 / 数据脱敏

  • 网站以散列格式存储用户密码。如前所述,哈希使用加密算法将密码转换为一串短的字母和数字。如果网站被黑客入侵,网络攻击者将无法获得哈希密码。

3.3.5 区块链交易 & 比特币

  • SHA-256 算法是创建比特币时用于加密货币的第一个算法。

  • 区块头是区块链的基本元素,因为它们有助于以特定顺序将一个交易区块连接到下一个交易区块。正如之前提到的,当输入的信息有微不足道的差别,SHA算法也能产生大相径庭的结果。

  • 任意区块发生变化时,都会影响后续的所有区块。所以如果想要修改某个区块的内容,就必须修改后许所有区块的内容,而这几乎是不可能的,从而保证了区块数据的安全。

  • 比特币挖矿的过程,就是反向找到输入值的过程。

这个输入值通过SHA256算法产生了一串开头带有约70个0的输出值

但是因为没有已知的公式,每个人能做的也只是通过蛮力一个数一个数去试,直到找到正确的输入值。

不过比特币只需要找到一个接近输入值的哈希值就好,不需要完全匹配。

实际上,挖矿难度可以调整,保证大概每10分钟能够有旷工找到匹配的输入值,然后赚取12.5比特币的出块奖励。

没有人能找到比特币挖矿的捷径,虽然找到捷径存在巨大的经济动力。

这就是为什么 SHA256 是地球上最流行的算法。

3.4 算法历史:SHA-0/1993 => SHA-1/1995 => SHA-2/2001 => SHA-3/2015

安全散列算法是美国国家安全局 (NSA) 创建的。美国政府为这项技术申请了专利,然后以免版税许可的形式发布,供所有人使用。

第一个SHA-0算法可以追溯到 1993 年。紧接着SHA-1于1995年问世,尽管已被破解,但现在还是有在一些老版本的服务器和客户端上使用。2001年,NSA发布了 SHA -2系列算法,其中包括 SHA 256 和其他五个不同算法标准:

  • SHA 224
  • SHA 384
  • SHA 512
  • SHA 512/224
  • SHA 512/256

2015 年 8 月 5 日,NIST(美国国家标准与技术研究院)发布了 SHA -3,这是最新的安全哈希算法,内部算法设计与以往不同。虽然 NIST 目前还没有计划吊销 SHA-2 算法,但如果有必要,SHA-3可以在当前应用中替代掉SHA-2。

3.5 SHA256 与 MD5 算法的区别?

相同点

1、都是密码散列函数,加密不可逆。

2、都可实现对任意长度对象加密,都不能防止碰撞。

不同点

  • 安全性方面:

    1、SHA256(称SHA2)的安全性最高;(相对md5和SHA1而言,SHA256很安全)

    2、md5相对来说比较容易碰撞,安全性没这么高。

  • 性能方面:

    以个60M的件为测试样本,经过1000次的测试平均值,这两种算法的表现如下:

    MD5算法运1000次的平均时间为:226ms

    SHA256算法运1000次的平均时间为:473ms

总而言之,md5和sha256都是密码散列函数,加密不可逆。虽然都不能防止碰撞,但是相对而言,md5比较容易碰撞,安全性没有sha256高。

X 参考与推荐文献

[信息安全] 加密算法:md5摘要算法 / sha256算法的更多相关文章

  1. asp中的md5/sha1/sha256算法收集

    对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...

  2. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  3. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  4. BASE64与单向加密算法MD5&SHA&MAC

    言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...

  5. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

  6. MD5摘要算法简析

    1 MD5简介 1.1  概述 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主 ...

  7. 基本的java加密算法MD5等等

    简单的java加密算法有: BASE64       严格地说,属于编码格式,而非加密算法 MD5             (Message Digest algorithm 5,信息摘要算法) SH ...

  8. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

  9. MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别

    MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度  MD5 是 128 位,SHA1  是 160 位 ,SHA256  是 256 位,SHA512 是512 位. ...

  10. 加密算法 MD5 和 SHA 的 JAVA 实现

    首先先简单的介绍一下MD5 和 SHA 算法 然后看一下在  java.security.MessageDigest   (信息摘要包下) 如何分别实现  md5 加密 和 sha 加密 最后在看一下 ...

随机推荐

  1. 2020-08-22:I/O多路复用中select/poll/epoll的区别?

    福哥答案2020-08-22: select,poll,epoll 都是 操作系统实现 IO 多路复用的机制. 我们知道,I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是 ...

  2. 2022-09-04:以下go语言代码输出什么?A:不能编译;B:45;C:45.2;D:45.0。 package main import ( “fmt“ ) func main() {

    2022-09-04:以下go语言代码输出什么?A:不能编译:B:45:C:45.2:D:45.0. package main import ( "fmt" ) func main ...

  3. 2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态。如何让容器处于running状态?

    2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态.如何让容器处于running状态? 答案2022-02-08: 加 ...

  4. Python Numpy 切片和索引(高级索引、布尔索引、花式索引)

    张量(Tensor).标量(scalar).向量(vector).矩阵(matrix) Python Numpy 切片和索引(高级索引.布尔索引.花式索引) Python NumPy 广播(Broad ...

  5. 【GiraKoo】重置Android Studio环境的几个方案

    [GiraKoo]重置Android Studio环境的几个方案 Android Studio经常在编译时,发现一些奇奇怪怪的编译/运行问题. 明明是很小的改动,但是出现了一些不相关的错误.搞不清楚究 ...

  6. adb server version (31) doesn't match this client (41); killing...

    使用用 adb devices 提示如下错误 C:\Users\Lenovo>adb devices adb server version (31) doesn't match this cli ...

  7. chrome 应用程序无法启动,因为应用程序的并行配置不正确

    win10系统谷歌浏览器无法启动,系统报错,如下图: 解决方案: 步骤1:进入chrome的安装路径C:\Program Files (x86)\Google\Chrome\... ...(找到自己的 ...

  8. Galaxy 生信平台(二):生产环境部署

    在 上一篇文章中,我们介绍了适合单个用户进行使用和开发的 Galaxy 在线平台,今天我们来聊一下在为多用户生产环境设置 Galaxy 时,我们应采取的一些可以让 Galaxy 获得最佳性能的额外步骤 ...

  9. 关于int**在malloc为二维数组分配空间时候的作用见解

    关于int**在用malloc函数为二维数组分配空间时候 int**   二级指针类型 二维数组的数组名为行指针,写成  arr  =(char**)malloc(n*sizeof(char))时,a ...

  10. Kubernetes——构建平台工程的利器

    作者|Loft Team 翻译|Seal软件 链接|https://loft.sh/blog/why-platform-engineering-teams-should-standardize-on- ...