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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

密码学 SM3算法 Python实现

發布時間:2023/12/31 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码学 SM3算法 Python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

密碼學 SM3算法 Python實現

#SM3IV = [0x7380166F, 0x4914B2B9, 0x172442D7, 0xDA8A0600, 0xA96F30BC, 0x163138AA, 0xE38DEE4D, 0xB0FB0E4E] T = [0x79cc4519, 0x7a879d8a]def ROL(X,i):i = i % 32return ((X<<i)&0xFFFFFFFF) | ((X&0xFFFFFFFF)>>(32-i)) def FF(X,Y,Z,j):if j>=0 and j<=15:return X ^ Y ^ Zelse:return ((X & Y) | (X & Z) | (Y & Z)) def GG(X,Y,Z,j):if j>=0 and j<=15:return X ^ Y ^ Zelse:return ((X & Y) | (~X & Z)) def P0(X):return X^ROL(X,9)^ROL(X,17) def P1(X):return X^ROL(X,15)^ROL(X,23) def T_(j):if j>=0 and j<=15:return T[0]else:return T[1] def Fill(message):m = bin(int(message,16))[2:]if len(m) != len(message)*4:m = '0'*(len(message)*4-len(m)) + ml = len(m)l_bin = '0'*(64-len(bin(l)[2:])) + bin(l)[2:]m = m + '1'm = m + '0'*(448-len(m)%512) + l_binm = hex(int(m,2))[2:]print("填充后的消息為:",m)return m def Group(m):n = len(m)/128M = []for i in range(int(n)):M.append(m[0+128*i:128+128*i])return M def Expand(M,n):W = []W_ = []for j in range(16):W.append(int(M[n][0+8*j:8+8*j],16))for j in range(16,68):W.append(P1(W[j-16]^W[j-9]^ROL(W[j-3],15))^ROL(W[j-13],7)^W[j-6])for j in range(64):W_.append(W[j]^W[j+4])Wstr = ''W_str = ''for x in W:Wstr += (hex(x)[2:] + ' ')for x in W_:W_str+= (hex(x)[2:] + ' ')print("第{}個消息分組 擴展后消息:".format(n+1))print("W:",Wstr)print("W':",W_str)return W,W_def CF(V,M,i):A,B,C,D,E,F,G,H = V[i]W,W_ = Expand(M,i)for j in range(64):SS1 = ROL((ROL(A,12)+E+ROL(T_(j),j%32))%(2**32),7)SS2 = SS1 ^ ROL(A,12)TT1 = (FF(A,B,C,j)+D+SS2+W_[j])%(2**32)TT2 = (GG(E,F,G,j)+H+SS1+W[j])%(2**32)D = CC = ROL(B,9)B = AA = TT1H = GG = ROL(F,19)F = EE = P0(TT2)print("j={}:".format(j))print(hex(A),hex(B),hex(C),hex(D),hex(E),hex(F),hex(G),hex(H))a,b,c,d,e,f,g,h = V[i]V_ = [a^A,b^B,c^C,d^D,e^E,f^F,g^G,h^H]return V_def Iterate(M):n = len(M)V = []V.append(IV)for i in range(n):V.append(CF(V,M,i))return V[n]if __name__ == '__main__':message = '61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364'm = Fill(message) #填充后消息M = Group(m) #數據分組Vn=Iterate(M) #迭代result = ''for x in Vn:result += (hex(x)[2:]+' ')print("雜湊值:",result)

總結

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

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