91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 1 次
    發布日期: 2021-06-06
  • 語言: Python
  • 標簽: SM3??SM4??

資源簡介

利用python3實現了國密SM3和國密SM4算法,一共有兩個文件SM3.py和sm4.py

資源截圖

代碼片段和文件信息

IV=[0x7380166f0x4914b2b90x172442d70xda8a0600
????0xa96f30bc0x163138aa0xe38dee4d0xb0fb0e4e]

T_j?=?[]
for?i?in?range(0?16):
????T_j.append(0)
????T_j[i]?=?0x79cc4519
for?i?in?range(16?64):
????T_j.append(0)
????T_j[i]?=?0x7a879d8a



#輸入為32比特,分為4塊,每塊為8比特的數
#輸出為32比特輸入對應的大整數
def?hex2int_32(key_data):
????tmp_data?=?int((key_data[0]?<????return?tmp_data

def?str2byte(msg):?#?字符串轉換成byte數組
????ml?=?len(msg)
????msg_byte?=?[]
????msg_bytearray?=?msg.encode(‘utf-8‘)
????for?i?in?range(ml):
????????msg_byte.append(msg_bytearray[i])
????return?msg_byte

def?byte2str(msg):?#?byte數組轉字符串
????ml?=?len(msg)
????str1?=?b““
????for?i?in?range(ml):
????????str1?+=?b‘%c‘?%?msg[i]
????return?str1.decode(‘utf-8‘)

def?hex2byte(msg):?#?16進制字符串轉換成byte數組
????ml?=?len(msg)
????if?ml?%?2?!=?0:
????????msg?=?‘0‘+?msg
????ml?=?int(len(msg)/2)
????msg_byte?=?[]
????for?i?in?range(ml):
????????msg_byte.append(int(msg[i*2:i*2+2]16))
????return?msg_byte

def?byte2hex(msg):?#?byte數組轉換成16進制字符串
????ml?=?len(msg)
????hexstr?=?““
????for?i?in?range(ml):
????????hexstr?=?hexstr?+?(‘%02x‘%?msg[i])#‘%02x‘%?msg[i]表示將msg[i]用兩位十六進制數表示
????return?hexstr


#輸入為96比特,三個分組,每個32比特
#輸出為32比特
def?FF(XYZj):
????if?j<=15:
????????return?X^Y^Z
????else:
????????return?(X&Y)|(X&Z)|(Y&Z)

def?GG(XYZj):
????if?j<=15:
????????return?X^Y^Z
????else:
????????return?(X&Y)|(~X&Z)

#輸入為一個32比特的整數
#輸出為循環左移n比特后的32比特整數
def?SHL(x?n):
????n?=?n?%?32
????xx?=?int(int(x?<????return?xx
def?ROTL(x?n):
????n?=?n?%?32
????xx?=?SHL(x?n)
????yy?=?xx?|?int((x?>>?(32?-?n))?&?0xffffffff)
????return?yy
#輸入為32比特的字,輸出也為32比特
def?P_0(X):
????return?X^(ROTL(X9))^(ROTL(X17))
def?P_1(X):
????return?X^(ROTL(X15))^(ROTL(X23))

#對原始消息msg做填充,使其二進制表示的長度為512的倍數
#msg的元素為8比特整數,
def?sm3_padding(msg):
????M=msg
????len1=len(msg)
????reserve1=len1?%?64
????M.append(0x80)
????reserve1?=?reserve1?+?1
????range_end?=?56
????if?reserve1?>?range_end:
????????range_end?=?range_end?+?64
????for?i?in?range(reserve1?range_end):
????????M.append(0x00)
#上述過程,在二進制表示下,含義為先添加了一個‘1’,又添加了一些0
????bit_length?=?(len1)?*?8
????bit_length_str?=?[bit_length?%?0x100]
????for?i?in?range(7):
????????bit_length?=?int(bit_length?/?0x100)
????????bit_length_str.append(bit_length?%?0x100)
????for?i?in?range(8):
????????M.append(bit_length_str[7-i])
#上述過程的含義是,添加msg長度的二進制表示
????return?M

#定義壓縮函數CFCF的輸入分為兩塊,第一部分為256比特,分為32塊,每塊為8比特整數
#第二部分為512比特,分為64塊,每塊為8比特整數
#輸出為256比特,分為32塊,每塊為8比特整數
def?CF(V_iB_i):
????W=[]
????for?i?in?range(16):
????????data=0
????????tmp_data?=?int((B_i[4*i]?<????????W.append(tmp_data)
????for?j?in?range(1668):
????????W.append(0)
????????W[j]=P_1(W[j-16]^W[j-9]^(ROTL(W[j-3]15)))^(ROTL(W[j-13]7))^W[j-6]
????W1=[]
????for?k?in?range(64):
????????W1.append(0)
????

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????4976??2018-12-25?17:00??python實現sm3sm4\sm3.py

?????文件???????4982??2018-12-23?10:03??python實現sm3sm4\sm4.py

?????目錄??????????0??2018-12-27?15:14??python實現sm3sm4

-----------?---------??----------?-----??----

?????????????????9958????????????????????3


評論

共有 條評論