[信息安全] 加密算法:md5摘要算法 / sha256算法
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算法的更多相关文章
- asp中的md5/sha1/sha256算法收集
对于asp这种古董级的技术,这年头想找一些有用的资料已经不容易了,下面是一些常用的加密算法: md5 (将以下代码另存为md5.inc) <% Private Const BITS_TO_A_B ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- BASE64与单向加密算法MD5&SHA&MAC
言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. 如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...
- MD5摘要算法简析
1 MD5简介 1.1 概述 MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主 ...
- 基本的java加密算法MD5等等
简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5 (Message Digest algorithm 5,信息摘要算法) SH ...
- python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐
python hashlib模块 hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...
- MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
MD5 SHA1 SHA256 SHA512 这4种本质都是摘要函数,不通在于长度 MD5 是 128 位,SHA1 是 160 位 ,SHA256 是 256 位,SHA512 是512 位. ...
- 加密算法 MD5 和 SHA 的 JAVA 实现
首先先简单的介绍一下MD5 和 SHA 算法 然后看一下在 java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密 最后在看一下 ...
随机推荐
- 2020-08-22:I/O多路复用中select/poll/epoll的区别?
福哥答案2020-08-22: select,poll,epoll 都是 操作系统实现 IO 多路复用的机制. 我们知道,I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是 ...
- 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 ...
- 2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态。如何让容器处于running状态?
2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态.如何让容器处于running状态? 答案2022-02-08: 加 ...
- Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
张量(Tensor).标量(scalar).向量(vector).矩阵(matrix) Python Numpy 切片和索引(高级索引.布尔索引.花式索引) Python NumPy 广播(Broad ...
- 【GiraKoo】重置Android Studio环境的几个方案
[GiraKoo]重置Android Studio环境的几个方案 Android Studio经常在编译时,发现一些奇奇怪怪的编译/运行问题. 明明是很小的改动,但是出现了一些不相关的错误.搞不清楚究 ...
- 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 ...
- chrome 应用程序无法启动,因为应用程序的并行配置不正确
win10系统谷歌浏览器无法启动,系统报错,如下图: 解决方案: 步骤1:进入chrome的安装路径C:\Program Files (x86)\Google\Chrome\... ...(找到自己的 ...
- Galaxy 生信平台(二):生产环境部署
在 上一篇文章中,我们介绍了适合单个用户进行使用和开发的 Galaxy 在线平台,今天我们来聊一下在为多用户生产环境设置 Galaxy 时,我们应采取的一些可以让 Galaxy 获得最佳性能的额外步骤 ...
- 关于int**在malloc为二维数组分配空间时候的作用见解
关于int**在用malloc函数为二维数组分配空间时候 int** 二级指针类型 二维数组的数组名为行指针,写成 arr =(char**)malloc(n*sizeof(char))时,a ...
- Kubernetes——构建平台工程的利器
作者|Loft Team 翻译|Seal软件 链接|https://loft.sh/blog/why-platform-engineering-teams-should-standardize-on- ...