设为首页 收藏本站
查看: 864|回复: 0

[经验分享] python 编写SM3算法

[复制链接]

尚未签到

发表于 2018-8-9 08:14:13 | 显示全部楼层 |阅读模式
  import struct
  IV="7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e"
  IV = int(IV.replace(" ", ""), 16)
  a = []
  for i in range(0, 8):
  a.append(0)
  a = (IV >> ((7 - i) * 32)) & 0xFFFFFFFF
  IV = a
  def out_hex(list1):
  for i in list1:
  print "%08x" % i,
  print "\n",
  def rotate_left(a, k):
  k = k % 32
  return ((a << k) & 0xFFFFFFFF) | ((a & 0xFFFFFFFF) >> (32 - k))
  T_j = []
  for i in range(0, 16):
  T_j.append(0)
  T_j = 0x79cc4519
  for i in range(16, 64):
  T_j.append(0)
  T_j = 0x7a879d8a
  def FF_j(X, Y, Z, j):
  if 0 <= j and j < 16:
  ret = X ^ Y ^ Z
  elif 16 <= j and j < 64:
  ret = (X & Y) | (X & Z) | (Y & Z)
  return ret
  def GG_j(X, Y, Z, j):
  if 0 <= j and j < 16:
  ret = X ^ Y ^ Z
  elif 16 <= j and j < 64:
  #ret = (X | Y) & ((2 ** 32 - 1 - X) | Z)
  ret = (X & Y) | ((~ X) & Z)
  return ret
  def P_0(X):
  return X ^ (rotate_left(X, 9)) ^ (rotate_left(X, 17))
  def P_1(X):
  return X ^ (rotate_left(X, 15)) ^ (rotate_left(X, 23))
  def CF(V_i, B_i):
  W = []
  for j in range(0, 16):
  W.append(0)
  unpack_list = struct.unpack(">I", B_i[j*4:(j+1)*4])
  W[j] = unpack_list[0]
  for j in range(16, 68):
  W.append(0)
  W[j] = P_1(W[j-16] ^ W[j-9] ^ (rotate_left(W[j-3], 15))) ^ (rotate_left(W[j-13], 7)) ^ W[j-6]
  str1 = "%08x" % W[j]
  W_1 = []
  for j in range(0, 64):
  W_1.append(0)
  W_1[j] = W[j] ^ W[j+4]
  str1 = "%08x" % W_1[j]
  A, B, C, D, E, F, G, H = V_i
  """
  print "00",
  out_hex([A, B, C, D, E, F, G, H])
  """
  for j in range(0, 64):
  SS1 = rotate_left(((rotate_left(A, 12)) + E + (rotate_left(T_j[j], j))) & 0xFFFFFFFF, 7)
  SS2 = SS1 ^ (rotate_left(A, 12))
  TT1 = (FF_j(A, B, C, j) + D + SS2 + W_1[j]) & 0xFFFFFFFF
  TT2 = (GG_j(E, F, G, j) + H + SS1 + W[j]) & 0xFFFFFFFF
  D = C
  C = rotate_left(B, 9)
  B = A
  A = TT1
  H = G
  G = rotate_left(F, 19)
  F = E
  E = P_0(TT2)
  A = A & 0xFFFFFFFF
  B = B & 0xFFFFFFFF
  C = C & 0xFFFFFFFF
  D = D & 0xFFFFFFFF
  E = E & 0xFFFFFFFF
  F = F & 0xFFFFFFFF
  G = G & 0xFFFFFFFF
  H = H & 0xFFFFFFFF
  """
  str1 = "%02d" % j
  if str1[0] == "0":
  str1 = ' ' + str1[1:]
  print str1,
  out_hex([A, B, C, D, E, F, G, H])
  """
  V_i_1 = []
  V_i_1.append(A ^ V_i[0])
  V_i_1.append(B ^ V_i[1])
  V_i_1.append(C ^ V_i[2])
  V_i_1.append(D ^ V_i[3])
  V_i_1.append(E ^ V_i[4])
  V_i_1.append(F ^ V_i[5])
  V_i_1.append(G ^ V_i[6])
  V_i_1.append(H ^ V_i[7])
  return V_i_1
  def hash_msg(msg):
  len1 = len(msg)
  reserve1 = len1 % 64
  msg = msg + chr(0x80)
  reserve1 = reserve1 + 1
  for i in range(reserve1, 56):
  msg = msg + chr(0x00)
  bit_length = (len1) * 8
  bit_length_string = struct.pack(">Q", bit_length)
  msg = msg + bit_length_string
  #print len(msg)
  group_count = len(msg) / 64
  m_1 = B = []
  for i in range(0, group_count):
  B.append(0)
  B = msg[i*64:(i+1)*64]
  V = []
  V.append(0)
  V[0] = IV
  for i in range(0, group_count):
  V.append(0)
  V[i+1] = CF(V, B)
  return V[i+1]
  print "abc"
  y = hash_msg("abc")
  print "result: ",
  out_hex(y)
  print "abcd" * 16
  y = hash_msg("abcd" * 16)
  print "result: ",
  out_hex(y)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548885-1-1.html 上篇帖子: Python 元组和集合的特点及常用操作 下篇帖子: Centos下安装Python3.6-11946937
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表