摘要算法RIPEMD-160
RIPEMD-160是一个修改版本的MD4算法,能够生成20字节的摘要值,安全性基本等同于SHA-1(注意,SHA-1标准没有说K值是怎么确定的,这一点非常可疑)。RIPEMD-160可视为左右两个MD4并行计算,如果使用两个线程,性能不会有很大区别。
RIPEMD-160内部维护64字节的输入缓存,20字节的输出缓存、20字节左计算缓存、20字节右计算缓存、8字节计数器和1字节的输入计数器。计数器保存按位计算的输入数据填充前长度。输入数据必须经过填充,变成64字节整数倍余56字节长度,然后把8字节计数器按小端存储在最后面,此时长度为64字节的整数倍。(注意,一定要确定算法标准文档的大小端约定!)
随后对这些数据进行轮运算。首先定义5个算子F1~F5和移位运算ROL32:
左常数K1~5和右常数K_1~5:
左右变换移位量数组:
左右索引变换数组:
计算开始前,初始化输出缓存:
轮函数描述如下:
(1)将输出缓存H内容复制到左计算缓存P和右计算缓存P_中。
(2)对j=0:15,执行
(3)对j=16:31,执行
(4)对j=32:47,执行
(5)对j=48:63,执行
(6)对j=64:79,执行
(7)将计算结果加入原输出缓存。
(8)对所有512位数据组重复以上操作。
(9)输出20字节输出缓存H。
完整代码如下所示: