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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

SM3算法 (python)

發(fā)布時(shí)間:2023/12/31 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SM3算法 (python) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
初步學(xué)習(xí)python可能有些語法不完善; 根據(jù)國密SM3文檔編寫,可能有誤,請指正! 國密局SM3文檔地址:302a3ada057c4a73830536d03e683110.pdf (sca.gov.cn)class SM3(object):def __init__(self, hex_string):self.hex_string = hex_stringself.bin_string = bin(int(hex_string, 16))[2:].zfill(4*len(hex_string))self.IV = '7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e'self.T = ['79cc4519'] * 16 + ['7a879d8a'] * 48self.B = []self.W = [''] * 68self.W_ = [''] * 64@staticmethod# 循環(huán)左移def shift_to_left(string, num):return string[num % len(string):] + string[:num % len(string)]@staticmethod# 異或def x_o_r(string_to_number_list):result = 0for i in range(len(string_to_number_list)):result = result ^ string_to_number_list[i]return bin(result)[2:]@staticmethod# 取反def n_o_t(string):op1 = '1' * len(string)op2 = stringresult = bin(int(op1, 2) - int(op2, 2))[2:].zfill(len(string))return result@staticmethoddef ff(j, x, y, z):if 0 <= j <= 15:result = SM3.x_o_r([int(x, 2), int(y, 2), int(z, 2)]).zfill(32)else:result = bin((int(x, 2) & int(y, 2)) | (int(x, 2) & int(z, 2)) | (int(y, 2) & int(z, 2)))[2:].zfill(32)return result@staticmethoddef gg(j, x, y, z):if 0 <= j <= 15:result = SM3.x_o_r([int(x, 2), int(y, 2), int(z, 2)]).zfill(32)else:result = bin((int(x, 2) & int(y, 2)) | (int(SM3.n_o_t(x), 2) & int(z, 2)))[2:].zfill(32)return result@staticmethoddef p0(x):result = SM3.x_o_r([int(x, 2), int(SM3.shift_to_left(x, 9), 2), int(SM3.shift_to_left(x, 17), 2)]).zfill(32)return result@staticmethoddef p1(x):result = SM3.x_o_r([int(x, 2), int(SM3.shift_to_left(x, 15), 2), int(SM3.shift_to_left(x, 23), 2)]).zfill(32)return resultdef cf(self, j, v, b):abcdefgh = [''] * 8for i in range(8):abcdefgh[i] = v[i*32:i*32+32]ss1 = SM3.shift_to_left(bin(int(SM3.shift_to_left(abcdefgh[0], 12), 2) + int(abcdefgh[4], 2) +int(SM3.shift_to_left(self.T[j], j % 32), 2))[2:].zfill(32)[-32:], 7)ss2 = SM3.x_o_r([int(ss1, 2), int(SM3.shift_to_left(abcdefgh[0], 12), 2)]).zfill(32)tt1 = bin(int(SM3.ff(j, abcdefgh[0], abcdefgh[1], abcdefgh[2]), 2) + int(abcdefgh[3], 2) + int(ss2, 2) +int(self.W_[j], 2))[2:].zfill(32)[-32:]tt2 = bin(int(SM3.gg(j, abcdefgh[4], abcdefgh[5], abcdefgh[6]), 2) + int(abcdefgh[7], 2) + int(ss1, 2) +int(self.W[j], 2))[2:].zfill(32)[-32:]abcdefgh[3] = abcdefgh[2]abcdefgh[2] = SM3.shift_to_left(abcdefgh[1], 9)abcdefgh[1] = abcdefgh[0]abcdefgh[0] = tt1abcdefgh[7] = abcdefgh[6]abcdefgh[6] = SM3.shift_to_left(abcdefgh[5], 19)abcdefgh[5] = abcdefgh[4]abcdefgh[4] = SM3.p0(tt2)result = abcdefgh[0] + abcdefgh[1] + abcdefgh[2] + abcdefgh[3] + \abcdefgh[4] + abcdefgh[5] + abcdefgh[6] + abcdefgh[7]return resultdef hash(self):sm3 = None# 1. 填充l = len(self.bin_string)k = 0while (l+1+k) % 512 != 448:k += 1self.bin_string += '1' + '0' * k + bin(l)[2:].zfill(64)# 2. 迭代n = (l+1+k+64) // 512for i in range(n):self.B.append(self.bin_string[i*512:i*512+512])# Tfor j in range(64):self.T[j] = bin(int(self.T[j], 16))[2:].zfill(32)# 計(jì)算 W 和 W‘for i in range(n):# Wfor j in range(68):if 0 <= j <= 15:self.W[j] = self.B[i][j*32:j*32+32]else:op1 = SM3.p1(SM3.x_o_r([int(self.W[j-16], 2), int(self.W[j-9], 2),int(SM3.shift_to_left(self.W[j-3], 15), 2)]).zfill(32))op2 = SM3.shift_to_left(self.W[j-13], 7)op3 = self.W[j-6]op4 = SM3.x_o_r([int(op1, 2), int(op2, 2), int(op3, 2)]).zfill(32)self.W[j] = op4# W’for j in range(64):op1 = SM3.x_o_r([int(self.W[j], 2), int(self.W[j+4], 2)]).zfill(32)self.W_[j] = op1# 64輪迭代v = bin(int(self.IV, 16))[2:].zfill(256)for j in range(64):v = SM3.cf(self, j, v, self.B)hex_string = hex(int(v, 2))[2:].zfill(64)sm3 = hex(int(hex_string, 16) ^ int(self.IV, 16))[2:].zfill(64)self.IV = sm3return sm3test1 = SM3('616263').hash() print(test1) test2 = SM3('61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364').hash() print(test2)

總結(jié)

以上是生活随笔為你收集整理的SM3算法 (python)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91原创国产 | 中国黄色1级片 | 亚洲一区二区自拍 | 一起操网站 | 性欧美bbw| 精品国产一区二区三区久久久蜜月 | 青青视频在线播放 | 日韩精品国产一区二区 | 久久免费国产精品 | 在线播放波多野结衣 | 国产在线激情 | 99国产精品久久久久久久 | 日本草草视频 | 精品久久久久久久久久久 | 少妇激情一区二区三区 | 免费h漫禁漫天天堂 | 激情欧美日韩 | 咪咪成人网 | а√中文在线资源库 | 9人人澡人人爽人人精品 | 在线日韩中文字幕 | 成年人在线观看视频 | 午夜视频91 | 亚洲精品国产精品国自 | 天天爽夜夜 | 涩色网站 | 色偷偷欧美 | 亚洲精品国产精品国自 | 国产精品一级二级三级 | 男女啪啪免费看 | 欧美色一区二区三区在线观看 | 亚洲一区二区三区高清在线 | 亚洲精品自拍视频 | 漂亮人妻洗澡被公强 日日躁 | 韩国美女黄色片 | 精品中文字幕视频 | 免费视频网站在线观看入口 | 欧洲av网站 | 蜜臀aⅴ国产精品久久久国产老师 | 日韩欧美高清视频 | 国产一区=区 | 欧美又黑又粗 | 久久精品在线播放 | 蜜臀一区二区三区精品免费视频 | 九九久久99 | 亚洲淫片 | 亚洲视频在线观看免费视频 | 女性喷水视频 | 五月天色婷婷丁香 | 欧美 变态 另类 人妖 | 国产精品综合 | 中文字幕av一区二区三区谷原希美 | 日韩av一区在线观看 | 欧美成年人视频在线观看 | 草久久av| 色偷偷五月天 | 国产精品36p | 91精品区 | 欧美人妻日韩精品 | 国产精品欧美在线 | 高清一区二区三区四区 | 国产精品一二三四五区 | 99亚洲国产精品 | 天天舔天天操 | 在线视频一区二区三区 | 97国产精品久久 | www黄色片| 国产精品久久久久久久久久免费看 | 寡妇av| 久久久久国产一区二区 | 亚洲最大福利 | 成人午夜网 | 青娱乐在线视频观看 | 永久免费网站直接看 | 内射一区二区三区 | 午夜91 | 欧美一区二区高清 | 亚洲成在人| 国产日韩欧美91 | 人妻少妇被粗大爽9797pw | 久久福利国产 | 亚洲一区在线不卡 | 俄罗斯一级片 | 午夜小视频在线观看 | 久久久噜噜噜www成人网 | 一区二区三区播放 | 欧美日韩在线免费观看 | 黄色国产视频 | 永久免费成人代码 | 欧美国产日本在线 | 久久大片 | 久久久www免费人成人片 | www.97av | 日韩成人无码 | 婷婷色在线视频 | 91丨porny丨海角社区 | 国产夫绿帽单男3p精品视频 | 亚洲高清免费 | 一级特黄aa大片免费播放 |