密码学 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实现相关推荐

  1. SM3算法python实现

    """ SM3是中华人民共和国政府采用的一种密码散列函数标准,适用于商用密码应用中的数字签名和验证.消息认证码的生成与验证以及随机数的生成, 可满足多种密码应用的安全需求 ...

  2. 密码学--DES算法(图形化界面)python

    密码学--DES算法python 要求 原理 主要功能界面 具体功能代码 源码 要求 网上搜索DES的源代码. 利用DES源代码实现下面功能: 给定某个Sbox的输入差分情况下,计算所有输入对和所有S ...

  3. 国密局公开SM2和SM3算法或预示中国商密算法将走向开放

    临近2010年年底的时候,在国密局的网站上公布了基于椭圆曲线ECC的SM2公开密钥国密算法和SM3杂凑算法.加上原来的SM1商密对称算法,中国定义的算法终于开始成熟并且以一个大方的姿态展示出来了. 此 ...

  4. 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现

    Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...

  5. 指令流水 一个时钟周期 出一个结果_以SM3算法为例,构建一个软硬协作算法加速器:性能分析与优化...

    衡量一款 ASIC 芯片可以从 PPA 三个角度进行. PPA 指的是: Power/Performance/Area,功耗 / 性能 / 面积. 衡量 FPGA 设计同样可以参照 PPA,但又有所不 ...

  6. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

  7. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  8. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

  9. 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)

    最优化算法python实现篇(3)--无约束一维极值(黄金分割法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 ...

  10. 最优化算法python实现篇(2)—无约束一维极值(二分法)

    最优化算法python实现篇(2)--无约束一维极值(二分法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 # ...

最新文章

  1. c# 带返回值的action_C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别...
  2. Leetcode 118:Pascal's Triangle 杨辉三角
  3. 《穿越计算机的迷雾》读书笔记三
  4. word如何(以标题)另起一页(段落 --> 换行和分页 --> 段前分页)
  5. boost::container模块实现普通容器的程序
  6. c++ 经典代码_C语言经典100题(31)
  7. 《Python 黑科技》10万粉丝头像千图成像(撩对象)
  8. 计算机对口升学试题英语,对口招生考试对口升学英语模拟试卷试题.docx
  9. win32 串口阻塞的方式发送接收数据
  10. Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002
  11. JDK开发WebService
  12. 强名称(3)强名称的脆弱性
  13. 计算机控制系统直流电机闭环调速实验,直流电机闭环调速控制系统
  14. 豆瓣高分电影爬取项目,思路清晰,易上手,附免费代码下载
  15. springboot 2.X——短信网关使用初体验
  16. python 对象的销毁_python对象销毁(垃圾回收)
  17. 用python计算100以内的素数_python-找出100以内的质数
  18. coward的个人简介
  19. 操作系统笔记——Linux系统实例分析、Windows系统实例分析
  20. m2ts视频格式在windows及mac下的解决方案

热门文章

  1. 数据分析中的统计学基础知识
  2. OMRON欧姆龙驱动器维修R88D-KT06F-Z过压故障处理
  3. 《算法竞赛入门经典》——刘汝佳
  4. Tabular Editor学习笔记_1
  5. 天涯明月刀ol最新服务器列表,天涯明月刀手游开服表 新区开服时间表汇总[多图]...
  6. C#list转JSON(Newtonsoft.Json.dll)(仅做记录)
  7. FileZilla客户端使用遇到的问题
  8. ASCII码十六进制转换表
  9. catia逆向建模步骤_catia逆向工程应用
  10. springboot集成微信app支付