1.5 其他信息摘要算法

信息摘要算法 - 其他信息摘要算法

信息摘要算法很多,主要的MD、MAC、SHA算法很常用,但是还有一些其他信息摘要算法,这些摘要算法JDK除了CRC部分算法外其他算法都没有提供。

RipeMD系列算法

1996年提出,算法学家(以美国国家标准委员会主导)在分析MD4、MD5的缺陷基础上做的改进算法,有4个标准和2个融合产物,区别是产生的摘要长度不同。

  • RipeMD128,产生128位摘要信息;
  • RipeMD160,产生160位摘要信息;
  • RipeMD256,产生256位摘要信息;
  • RipeMD320,产生320位摘要信息;
  • HmacRipeMD128,与MAC算法融合产物,产生128位摘要信息;
  • HmacRipeMD160,与MAC算法融合产物,产生160位摘要信息;

Tiger系列算法

1995年提出,号称是最快的Hash算法,专门为64为机器做了优化,信息摘要长度为192位。

Whirlpool系列算法

目前已被ISO标准采纳,是最安全的信息摘要算法。历史上有三个版本,最新的是2003年版本,产生的摘要长度在512位。

CRC算法

CRC算法并不是属于加密算法范畴,和奇偶校验码循环冗余校验码 同源,CRC是循环冗余校验码,一个产生简短固定位数的散列函数。CRC算法是信息摘要算法的前身,为信息摘要算法奠定了基础

主要用途:校验数据输出/保存后的错误内容。

一般用法:在计算后附加到原数据中,使用数据前,对数据的完整性做校验。

常见场景:WinRAR这类数据压缩软件,防止数据压缩文件错误。

CRC算法也分为很多类:

  • CRC-1:主要用于硬件,也就是常说的奇偶校验码;
  • CRC-32:主要在通信领域实现差错控制,如IEEE 802.3只是CRC-32中的一种实现;
  • CRC-32-Adler:CRC-32的变种,速度比CRC-32块,常用在zlib压缩算法中;
  • CRC-128:演变为MD算法。
  • CRC-160:演变为SHA算法。

Java算法实现

Java没有实现以上算法(除CRC-32和Adler-32算法外),可以使用Bouncy Castle的算法实现。下面是CRC-32算法的使用示例:

public class CRCTest{
    
    public static void main(String[] args) throws Exception{
        String input = "test";
        CRC32 crc32 = new CRC32();
        crc32.update(input.getBytes());
        String hex = Long.toHexString(crc32.getValue());
        System.out.println(hex);
    }
    
}

你可能感兴趣的:(1.5 其他信息摘要算法)