单向散列 —— 简介、SHA256加密算法、RIPEMD160加密算法

单向散列

单向散列算法,又称hash函数(杂凑函数,或者杂凑算法),就是把任意输入消息字符串变成固定长的输出串的一种函数,这个输出串称为该消息的杂凑值,一般使用产生消息摘要,密钥加密等。具体指的是根据输入消息计算后,输出固定长度数值的算法,输出数值也成为“散列值”或消息摘要,其长度通常在128~256位之间。

  • 输入的长度可以是任意的
  • 输出长度是固定的,根据目前的计算技术应至少取128bit长,以便抵抗生日攻击
  • 对每一个给定的输入,计算输出(即杂凑值)是很容易的。
  • 给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值是计算上不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得他们杂凑到同一个值是计算上不可行的。
  • 所有的加密算法是公开的
  • 具备单向性,不可以逆推反算。

经典算法

MD4/MD5/SHA系列等。

MD4(RFC 1320)是MIT的Ronald L.Rivest在1990年设计的,MD是Message Digest的缩写。其输出为128位。MD4已被证明不够安全。

MD5(RFC 1321)是Rivest于1991年对MD4的改进版本。它对输入仍以512位进行分组,其输出是128位。MD5比MD4更加安全,但是过程更加复杂,计算速度也慢一些。MD5已被证明不具备”强抗碰撞性”。

SHA(Secure Hash Algorithm)并非一个算法,而是一个Hash函数族。NIST(NationalInstitute of Standards andTechnology)于1993年发布其首个实现。知名的SHA-1算法1995年面世,它输出长度160位的Hash值,抗穷举性更好。SHA-1设计模仿了MD4算法,采用类似原理。SHA-1已被证实不具备“强扛碰撞性”。

为了提高安全性,NIST还设计出了SHA-224、SHA-256、SHA-384和SHA-512算法(SHA-2),跟SHA-1算法原理类似。SHA-3相关算法也已经被提出。、

SHA256

现在还是有很多系统采用的MD5和SHA-1算法,但是这些算法已经不安全了,一般现在推荐至少使用SHA-256或更安全的算法。

目前来说,安全系数还是不错的,都是国际标准加密算法,现在市场上的很多透明加密软件都有采用此加密算法,包括比特币

比特币使用的是POW共识算法,它就是使用sha256杂凑函数,来计算一个与当时总算力相对应的一个hash值,从而可以获得比特币。sha256的hash输出值是16进制的字符串,而16进制字符串,每两个字符占一个字节,一个字节= 8bit,所以使用sha256杂凑函数得到的是一个256bit的值,

当然,如果需要的话,也可以使用安全系数更高的sha512算法。

RIPEMD

RIPEMD(RACE原始完整性校验讯息摘要)是一种加密哈希函数,由鲁汶大学的Hans Dobbertin,Antoon Bosselaers 和 Bart Prenee组成的COSIC 研究小组发布于1996年。 RIPEMD是以MD4为基础原则所设计的 ,而且其表现与更有名的SHA-1类似。

RIPEMD-160是以原始版RIPEMD所改进的160位元版本,而且是RIPEMD系列中最常见的版本。 RIPEMD-160是设计给学术社群所使用的,刚好相对于国家安全局 所设计SHA-1和SHA-2算法。 另一方面,RIPEMD-160比SHA-1较少使用,所以可能造成RIPEMD-160比SHA还不常被审查。另外,RIPEMD-160并没有任何专利所限制。

RIPEMD160哈希值的输出值一般是16进制的字符串。而16进制字符串,每两个字符占一个字节。我们知道,一个字节=8bit.所以使用ripemd160加密函数所得到的是一个160bit的值。

案例请转:https://blog.csdn.net/The_Reader/article/details/82972612

Keccak

SHA-3第三代安全散列算法(Secure Hash Algorithm 3),之前名为Keccak(念作/ˈkɛtʃæk/或/kɛtʃɑːk/))算法,设计者宣称在Intel Core 2  的CPU上面,此算法的性能是12.5cpb(每字节周期数,cycles per byte)。不过,在硬件实做上面,这个算法比起其他算法明显的快上很多。

SHA3采用Keccak算法,在很多场合下Keccak和SHA3是同义词,但在2015年8月SHA3最终完成标准化时,NIST调整了填充算法,标准的SHA3和原先的Keccak算法就有所区别了。在早期的Ethereum相关代码中,普遍使用SHA3代指Keccak256,为了避免和NIST标准的SHA3混淆,现在的代码直接使用Keccak256作为函数名

keccak算法是比较复杂的,这里只讨论这个算法的特征。首先他是采用了海绵结构, 什么是海绵结构呢,首先海绵是可以吸水的,吸了水以后呢又可以挤压将水给挤压出来,保持整个海绵的结构不变。所以海绵结构的工作原理是先输入我们要计算的串,然后对串进行一个填充,将输入串用一个可逆的填充规则填充并且分块,分块后就进行吸水的阶段,当处理完所有的输入消息结构以后,海绵结构切换到挤压状态,挤压后输出的块数可由用户任意选择。 
 

你可能感兴趣的:(密码学)