日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sm3 算法java_国密SM3杂凑算法与实现

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sm3 算法java_国密SM3杂凑算法与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

國密辦已于去年公布國產商密算法SM3,http://www.oscca.gov.cn/News/201012/News_1199.htm,這給其應用和開發帶來了方便,也見網上有許多實現的例子,出于一個項目開發需要,也試試其實現。

實現思路:完全從頭來寫不太適合如今開發時代,尤其是開源代碼的大量使用。密碼算法實現比較有名的就是:openssl,其體系龐大,使用也方便。但從學習與研究上來看,還是需要實現一個簡化的代碼,要小,適用于移植與嵌入。那就看看有沒有更簡潔的源代碼庫。在網上搜索一下,還找到個比較好的算法庫,也不大,就是:Xyssl,好像是個法國人開發,管他是誰好用就行。

Xyssl實現了常用雜湊算法MD2,MD4,MD5,SHA1,SHA2,SHA4等,并且代碼簡潔,適用于擴展,了解其實現機制外,那就看看我們的SM3算法吧。

SM3算法結果為256位,其大體上與SHA256相同,其算法過程如下:

1、填充

SM3對消息長度小于為2^64位進行運算,其填充方法與SHA256的相同,假設消息m 的長度為l 比特。首先將比特“1”添加到消息的末尾,再添加k 個“0”,k是滿足l + 1 + k?= 448mod512 的最小的非負整數。然后再添加一個64位比特串,該比特串是長度l的二進制表示。填充后的消息m′ 的比特長度為512的倍數。

2、迭代壓縮

這個過程與其他HASH算法類似,先進行消息擴展,之后迭代與壓縮,其詳細過程可參考標準文檔。其擴展與壓縮計算以循環移位為主,并有異或計算。

在算法開發中碰到一個很有趣的事:使用VC6進行開發,在消息擴展使用,計算式比較長:

W[j] = P1( W[j-16] ^ W[j-9] ^ ROTL(W[j-3],15)) ^ ROTL(W[j - 13],7 ) ^ W[j-6];

其運行結果為:VC6的debug版運行與標準說明的相同,而release版結果不同,變化很大,據分析可能原因是:VC6的編譯優化上可能有些不夠造成的,而用VC++2008? 就不會出現debug和release計算結果不同的現象。

后來將這復雜算式改為多步計算,問題就沒了,哈哈,管他呢,解決問題是硬道理啊。

填充的消息經擴展后在進行64輪迭代,最后就算出雜湊結果。

SS1 = ROTL((ROTL(A,12) + E + ROTL(T[j],j)), 7);

SS2 = SS1 ^ ROTL(A,12);

TT1 = FF0(A,B,C) + D + SS2 + W1[j];

TT2 = GG0(E,F,G) + H + SS1 + W[j];

D = C;

C = ROTL(B,9);

B = A;

A = TT1;

H = G;

G = ROTL(F,19);

F = E;

E = P0(TT2);

程序運行結果與標準文檔的測試數據比較完全一致,證明實現正確。

總結

以上是生活随笔為你收集整理的sm3 算法java_国密SM3杂凑算法与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。