仿购物网站目录,上海开发小程序和app的公司,长沙企业推广,网站设计原则回顾散列算法
我的上篇文章#xff1a;学习散列表 在上篇文章杂货铺的示例中#xff0c;我们希望散列函数的结果是均匀分布的。散列函数接受一个字符串#xff0c;并返回一 个索引号。
安全散列算法#xff08;secure hash algorithm#xff0c; SHA#xff09;函数
给…回顾散列算法
我的上篇文章学习散列表 在上篇文章杂货铺的示例中我们希望散列函数的结果是均匀分布的。散列函数接受一个字符串并返回一 个索引号。
安全散列算法secure hash algorithm SHA函数
给定一个字符串 SHA返回其散列值。比如一个hellosha返回2cf24bd…很长的值 对于每个不同的字符串 SHA生成的散列值都不同。
比较文件内容是否相同 你可使用SHA来判断两个文件是否相同这在比较超大型文件时很有用。假设你有一个4 GB 的文件并要检查朋友是否也有这个大型文件。为此你不用通过电子邮件将这个大型文件发送 给朋友而可计算它们的SHA散列值再对结果进行比较。
检查密码 SHA还让你能在不知道原始字符串的情况下对其进行比较。例如假设Gmail遭到攻击攻击者窃取了所有的密码你的密码暴露了吗没有因为Google存储的并非密码而是密码的SHA散列值你输入密码时 Google计算其散列值并将结果同其数据库中的散列值进行比较。
SHA被广泛用于计算密码的散列值。**这种散列算法是单向的。**你可根据字符串计算出散列值。但你无法根据散列值推断出原始字符串。
SHA实际上是一系列算法 SHA-0、 SHA-1、 SHA-2和SHA-3。 目前SHA-0和SHA-1已被发现存在一些缺陷。如果你要使用SHA算法来计算密码的散列值请使用SHA-2或SHA-3。当前最安全的密码散列函数是bcrypt但没有任何东西是万无一失的。
提一下MD5消息摘要算法被广泛使用的密码散列函数相比较SHA-1生成摘要的性能高一些MD5的摘要的长度尽128bitSHA-1摘要长度160bit。多出32bit意味着什么呢不同明文的碰撞几率降低了2^32 324294967296倍。
再说一下SHA-2系列算法 SHA-2是一系列SHA算法变体的总称其中包含如下子版本
SHA-256可以生成长度256bit的信息摘要。
SHA-224SHA-256的“阉割版”可以生成长度224bit的信息摘要。
SHA-512可以生成长度512bit的信息摘要。
SHA-384SHA-512的“阉割版”可以生成长度384bit的信息摘要。
这么多算法如何应用呢
为了适应不同的应用场景从而对安全、性能、空间等因素做出权衡。比如说过我的需求仅仅是验证数据完整性使用SHA-512显然是浪费了。另外如果想要追求安全性也可以考虑把多种摘要算法结合使用。比如下面这样
明文 abcd
MD5摘要e2fc714c4727ee9395f324cd2e7f331f SHA-256摘要88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589
合成摘要e2fc714c4727ee93209c897823b9217da3e161936f031589
取MD摘要的前16和SHA-256摘要的后32位拼成一个长度48位的合成摘要。这样除非知道拼接规则否则外人是无从破解的。
tips了解更多SHA相关原理访问https://blog.csdn.net/wufaliang003/article/details/79782168