"""
SM3是中华人民共和国政府采用的一种密码散列函数标准,适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成, 可满足多种密码应用的安全需求
对长度为l(l < 2 ^ 64)
比特的消息m,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度
为256比特。s2m2b(s)     字符串s 转化为二进制字符串m & 数据m填充,分组b[i]
cf(v,b)         CF函数实现
zy(n,k)             #循环左移k%32位,共32比特
cut_text(text,lenth)  #数据按间距分组异或等基础运算
FF(x,y,z,j)
GG(x,y,z,j)
p0(x)
p1(x)
"""
import re
def cut_text(text,lenth):  #数据按间距分组划分iv向量textArr = re.findall('.{'+str(lenth)+'}', text)textArr.append(text[(len(textArr)*lenth):])return textArr
def zy(n,k):        #循环左移k位,共32比特k=k%32b=str(bin(n))b=b.split('0b')[1]b=(32-len(b))*'0'+breturn int(b[k:]+b[:k],2)def s2m2b(s):               #字符串s 转化为二进制字符串m & 数据m填充,分组b[i]r = ""x = ""for i in s:l = 8 - len((x + bin(ord(i))).split('0b')[1]) % 8r = r + l * '0' + (x + bin(ord(i))).split('0b')[1]k=512-(64+(len(r)+1))%512out=r+'1'+k*'0'length=bin(len(r)).split('0b')[1]t=64-len(length)out=out+t*'0'+lengthout=cut_text(out,512)return out
def T(j):if j<16:T =int('0x79cc4519',16)else:T =int('0x7a879d8a',16)return T
def FF(x,y,z,j):  #布尔函数1,式中X,Y,Z 为字。if j<=15:return x^y^zelse:return (x&y)|(y&z)|(x&z)
def GG(x,y,z,j):    #布尔函数2,式中X,Y,Z 为字。if j<=15:return x^y^zelse:return (x&y)|(~x&z)def p0(x):  #置换函数1,式中X为字return x^(zy(x,9))^(zy(x,17))
def p1(x):  #置换函数2,式中X为字return x^(zy(x,15))^(zy(x,23))def cf(v,b):w = cut_text(b, 32)w2 = []for j in range(16):w[j]=int(w[j],2)del w[16]for j in range(16, 68):x = p1(w[j - 16] ^ w[j - 9] ^ zy(w[j - 3] ,15)) ^ zy(w[j - 13] ,7) ^ w[j - 6]w.append(x)for j in range(64):x = w[j] ^ w[j + 4]w2.append(x)# print("w1,w2",len(w),len(w2))# print("w1,w2",w,w2)A=cut_text(v,8)# print("len(a),a",len(A),A)for i in range(8):A[i]=int(A[i],16)for j in range(64):ss1=zy((zy(A[0],12)+A[4]+zy(T(j),j))%(2**32),7)%(2**32)ss2=(ss1^zy(A[0],12))%(2**32)tt1=(FF(A[0],A[1],A[2],j)+A[3]+ss2+w2[j])%(2**32)tt2=(GG(A[4],A[5],A[6],j)+A[7]+ss1+w[j])%(2**32)A[3]=A[2]A[2]=zy(A[1],9)A[1]=A[0]A[0]=tt1A[7]=A[6]A[6]=zy(A[5],19)A[5]=A[4]A[4]=p0(tt2)# {print(j,end=":")# for i in A:#     if i !='':#         print(hex(i),end=',')# print()}a=''for i in range(8):A[i]=str(hex(A[i])).split('0x')[1]k=8-len(A[i])a=a+k*'0'+A[i]v1=int(a,16)^int(v,16)v1=hex(v1).split('0x')[1]if len(v1)<64:v1="0"*(64-len(v1))+str(v1)# print(v1,"v1")return v1def G_hash(P):# 对明文 hashiv = '7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e'B = s2m2b(P)for b in B:if b != '':iv = cf(iv, b)return ivif __name__ ==  '__main__':iv='7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e'plain = input("请输入明文:")B=s2m2b(plain)for b in B:if b!='':iv=cf(iv,b)print(iv)

SM3算法python实现相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归

    1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...

  9. 哈希运算python实现_一致性哈希算法 python实现

    # -*- coding: utf-8 -*- """ 一致性哈希算法 python实现 参考 http://weblogs.java.net/blog/2007/11/ ...

最新文章

  1. 英文 电气与计算机工程学报,ei来源刊分为哪三大类?如何区别compendex和ei page one的文章?...
  2. 耗时两个礼拜,8000字安卓面试长文,建议收藏
  3. iis设置服务器文件权限设置,iis7如何配置写入权限以上传文件---急急急
  4. java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例
  5. 【线程控制:线程休眠】
  6. 软件设计师08-程序语言基础知识
  7. 架构分享--微博架构的回顾
  8. Server Installation for Jitsi Meet 2
  9. umbrello 用户手册_别克君威车主必备:君威用户手册|君威使用说明书电子版|君威保养手册_搜狐汽车...
  10. apache2.2 + php5.2.4 + mysql5.0.x 安装配置
  11. 水晶报表中对某一栏位值进行处理_从主流报表工具的报价看报表行业的报价水深-----常用报表工具对比---主流报表价格对比...
  12. ImageView显示图像控件
  13. 通用型免疫(共)沉淀(IP/Co-IP)工具箱(磁珠)实验
  14. 常用分析模型---5W2H分析模型
  15. 基于java的高速公路收费系统——计算机毕业设计
  16. 如何选择期权品种,是做期货期货还是做期权
  17. a-upload 上传文件到阿里oss
  18. win10所有浏览器打开一段时间后会自动关闭-未解决
  19. 美丽的诗句 撩妹首选哦!
  20. Kotlin项目实战之手机影音---悦单条目实现及BaseListFragment抽取

热门文章

  1. c语言饭卡管理系统_C语言饭卡管理系统(附代码).doc
  2. 如何让电脑显示SVG图片的缩略图
  3. Gradle编译问题(appcompat和material相关)
  4. 新零售智慧门店是什么 新零售智慧门店如何建设
  5. Django实现注册登录功能
  6. Python框架——最详细的Django框架入门
  7. QuartusII仿真通过但上板验证不过
  8. 互联网专家资源分享(一)
  9. web前端性能优化指南
  10. 通过xml可以直观的解析GPU信息与进程信息