摘要算法RIPEMD-160
RIPEMD-160是一個(gè)修改版本的MD4算法,能夠生成20字節(jié)的摘要值,安全性基本等同于SHA-1(注意,SHA-1標(biāo)準(zhǔn)沒有說K值是怎么確定的,這一點(diǎn)非??梢桑?。RIPEMD-160可視為左右兩個(gè)MD4并行計(jì)算,如果使用兩個(gè)線程,性能不會(huì)有很大區(qū)別。
?
RIPEMD-160內(nèi)部維護(hù)64字節(jié)的輸入緩存,20字節(jié)的輸出緩存、20字節(jié)左計(jì)算緩存、20字節(jié)右計(jì)算緩存、8字節(jié)計(jì)數(shù)器和1字節(jié)的輸入計(jì)數(shù)器。計(jì)數(shù)器保存按位計(jì)算的輸入數(shù)據(jù)填充前長度。輸入數(shù)據(jù)必須經(jīng)過填充,變成64字節(jié)整數(shù)倍余56字節(jié)長度,然后把8字節(jié)計(jì)數(shù)器按小端存儲(chǔ)在最后面,此時(shí)長度為64字節(jié)的整數(shù)倍。(注意,一定要確定算法標(biāo)準(zhǔn)文檔的大小端約定!)
?
隨后對這些數(shù)據(jù)進(jìn)行輪運(yùn)算。首先定義5個(gè)算子F1~F5和移位運(yùn)算ROL32:
左常數(shù)K1~5和右常數(shù)K_1~5:
左右變換移位量數(shù)組:
左右索引變換數(shù)組:
計(jì)算開始前,初始化輸出緩存:
輪函數(shù)描述如下:
(1)將輸出緩存H內(nèi)容復(fù)制到左計(jì)算緩存P和右計(jì)算緩存P_中。
(2)對j=0:15,執(zhí)行
(3)對j=16:31,執(zhí)行
(4)對j=32:47,執(zhí)行
(5)對j=48:63,執(zhí)行
(6)對j=64:79,執(zhí)行
(7)將計(jì)算結(jié)果加入原輸出緩存。
(8)對所有512位數(shù)據(jù)組重復(fù)以上操作。
(9)輸出20字節(jié)輸出緩存H。
?
完整代碼如下所示: