尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

常见的单向散列(哈希)算法

常见的单向散列(哈希)算法 MD5和SHA-256都是计算机领域非常著名的哈希算法Hash Algorithm也叫散列算法。它们的作用是把任意长度的数据一段文字、一个文件等映射成一个固定长度的“数字指纹”或“摘要”。虽然它们的作用本质一样但在安全性和应用场景上有着巨大的区别。1. MD5 是什么用在哪里MD5Message-Digest Algorithm 5诞生于 1991 年它会产生一个128位16字节的哈希值通常用 32 位的十六进制字符串表示例如7a86c1575830d473a28292e8a612480a。❌ 现状不再安全MD5 在数学上已经被彻底攻破。现在利用“碰撞攻击”Collision Attack可以在极短时间内伪造出两个内容不同、但 MD5 值完全相同的物理文件。️ 现在的用途因为被攻破它绝不能用于任何涉及安全、加密、密码存储的场景。但由于它计算速度极快目前主要用于文件完整性校验比如在论坛下载一个大游戏或纯净版系统镜像官方会提供一个 MD5 值。你下载完后自己测一下如果一致说明文件在下载过程中没有损坏或丢失数据。秒传功能网盘如百度网盘在你上传大文件时会先计算文件的 MD5。如果服务器上已经有相同 MD5 的文件就会直接“秒传”成功省去上传时间。2. SHA-256 是什么用在哪里SHA-256Secure Hash Algorithm 256是由美国国家安全局NSA设计、2001年发布的一套更高级的算法属于 SHA-2 家族。它会产生一个256位32字节的哈希值通常用 64 位的十六进制字符串表示。现状极度安全截至目前SHA-256 在数学上依然是安全、不可逆且抗碰撞的。以人类目前的算力想凭空制造一个 SHA-256 碰撞或者反向推导原数据几乎是不可能的。️ 现在的用途因为安全系数高它被广泛应用于当今的网络安全核心领域密码学与数据加密用户在网站注册时密码绝不能明文存进数据库通常会经过 SHA-256配合“加盐”技术哈希后存储。数字证书与 HTTPS你浏览银行、电商网站时浏览器和服务器之间建立的加密连接SSL/TLS 证书其数字签名普遍使用 SHA-256。区块链与比特币比特币的挖矿机制工作量证明 PoW以及区块指针的链接核心底层全部基于 SHA-256 算法。敏感软件校验发布开源代码或高安全性软件如 Linux 发行版内核时官方都会提供 SHA-256 校验码以防黑客恶意篡改。特性MD5SHA-256输出长度128 位 (32位十六进制字符)256 位 (64位十六进制字符)安全性❌极低已被攻破易碰撞极高当前工业界主流标准计算速度 极快 较慢但现代芯片有硬件加速核心应用文件防损校验、网盘秒传密码哈希、区块链比特币、数字证书除了MD5和SHA-256在密码学和计算机工程中常见的单向散列哈希算法还有很多。它们根据诞生时代、安全需求和性能要求的不同被分为了几个主要的“家族”。以下是除了那两个之外最常见的单向散列算法1. SHA 家族的其他成员Secure Hash AlgorithmSHA 散列算法家族由美国国家安全局NSA设计是目前全球工业界和互联网的标准。SHA-1输出长度160位40位十六进制字符。现状已被攻破不再安全。在 2017 年谷歌就成功实现了 SHA-1 的“物理碰撞”让两个不同的 PDF 文件拥有相同的 SHA-1 值。曾经的用途曾广泛用于 Git 版本控制系统用来标识代码提交和早期的 SSL 证书。如今大部分安全场景都已将其淘汰。SHA-512输出长度512位128位十六进制字符。现状极度安全。它和 SHA-256 同属于SHA-2 家族但由于输出长度翻倍它的安全强度甚至高于 SHA-256。用途常用于对安全级别要求极高的操作系统密码存储如 Linux 的/etc/shadow文件。在 64 位操作系统上它的运行效率有时甚至比 SHA-256 还要快。SHA-3 家族如 SHA3-256现状全新一代标准极其安全。背景虽然 SHA-2含 SHA-256/512目前很安全但由于它的数学结构与被攻破的 SHA-1 类似科学家们为了未雨绸缪在 2015 年发布了 SHA-3。它采用了完全不同的“海绵结构”Sponge Construction。用途作为下一代安全备用标准。例如以太坊Ethereum区块链中使用的Keccak-256算法就是 SHA-3 的前身。2. 专门用于“密码存储”的强力哈希带防暴破功能前面提到的 SHA-256 虽然安全但计算速度太快了。黑客如果拿到数据库可以用显卡GPU每秒尝试几百亿次去“暴力破解”用户的弱密码。为了解决这个问题科学家发明了故意变慢的哈希算法Bcrypt / Scrypt特点它们在计算哈希时内部会进行成千上万次的循环迭代并且极度消耗内存Scrypt 尤甚。用途现代网站后端如 Java、PHP、Python 等框架在存储用户登录密码时最推荐使用 Bcrypt。即使黑客拿到 Bcrypt 哈希值因为计算成本太高用显卡连环轰炸也猜不出原密码。Argon2现状目前密码哈希比赛PHC的冠军被公认为当今全球保护密码最完美的单向散列算法。它不仅抗 GPU 暴破还能抵抗专门的矿机ASIC芯片暴破。3. 非加密型哈希追求极致速度用于数据结构这类哈希算法的根本目的不是为了防御黑客而是为了在程序运行中极速区分数据。它们故意放弃了安全性换取了百倍于 SHA-256 的计算速度MurmurHash特点速度极快随机分布性极好碰撞概率低但黑客很容易逆向伪造。用途广泛用于大数据和数据库领域如 Redis、Hadoop、布隆过滤器 Bloom Filter。用来在内存中快速做数据建立索引和查找。CRC32循环冗余校验特点非常古老且简单的校验算法只产生 8 位的十六进制字符。用途主要用于网络传输和压缩包如 .zip, .rar的错误检查。你解压文件时如果报错“CRC校验错误”就是由于这个算法发现下载的数据包损坏了。 常见哈希算法梯队一览我们可以把这些常见的单向散列算法分为三个梯队算法安全级别代表算法主要舞台已被淘汰 / 仅限防损MD5, SHA-1, CRC32文件完整性校验、网盘秒传、解压校验当前主流安全SHA-256, SHA-512HTTPS 证书、区块链、数字签名超高安全 / 专防爆破Bcrypt, Argon2, SHA-3银行及互联网系统的用户密码存储⚡非安全 / 追求极速MurmurHash, FnV数据库索引、Redis 缓存、大数据去重与加密解密技术的区别MD5 和 SHA-256 属于哈希算法散列算法而不是加密解密技术。它们之间有一个本质的区别加密是为了解密而哈希是不可逆的。我们可以用一个简单的比喻和对比来看清它们的区别1. 为什么它们不是加密解密加密Encryption就像是把一封信锁进保险箱。你有钥匙密钥就能锁上别人有钥匙就能打开并看到原信件。它是双向、可逆的。哈希Hashing如 MD5/SHA-256就像是把这封信放进绞肉机打成肉泥。无论你给它一本书还是一句话它都只吐出固定长度的“肉泥”摘要。你永远无法通过肉泥把原信件拼回来。它是单向、不可逆的。2. 核心区别对比表特性加密解密如 AES, RSA哈希算法如 MD5, SHA-256方向性双向可逆明文 ⇄ 密文单向不可逆明文 → 哈希值是否需要密钥需要用来加密和解密不需要相同的数据永远算出相同的哈希输出长度不固定原数据越长加密后越长固定长度无论输入多大输出长度永远不变根本目的保护数据隐私防止别人偷看以后还要还原使用。验证数据完整性指纹确保数据没被篡改。3. 那为什么存储密码时用 SHA-256它不也是为了安全吗这正是最容易让人误解的地方。网站存你密码时用的是哈希验证而不是加密注册时你输入密码123456网站用 SHA-256 算出8d969ee7...然后把这一串“肉泥”存进数据库。网站自己也不知道你的明文密码是什么。登录时你再次输入123456网站把系统当场算出的哈希值跟数据库里的那串“肉泥”做比对。如果一致就允许你登录。这种机制的精妙之处在于即使黑客把网站数据库偷走了他也只拿到了那一堆无法还原的哈希值肉泥依然拿不到你的真实密码。 总结MD5 和 SHA-256 属于密码学的范畴但它们是用来生成“数据指纹”的不具备“解密还原”的功能因此不属于加密解密技术而是单向散列/哈希技术。
返回列表