SM3算法python实现
"""
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实现相关推荐
- 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现
Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...
- 指令流水 一个时钟周期 出一个结果_以SM3算法为例,构建一个软硬协作算法加速器:性能分析与优化...
衡量一款 ASIC 芯片可以从 PPA 三个角度进行. PPA 指的是: Power/Performance/Area,功耗 / 性能 / 面积. 衡量 FPGA 设计同样可以参照 PPA,但又有所不 ...
- 2021-03-15 数据挖掘算法—K-Means算法 Python版本
数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...
- 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...
- 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)
最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...
- 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)
最优化算法python实现篇(3)--无约束一维极值(黄金分割法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 ...
- 最优化算法python实现篇(2)—无约束一维极值(二分法)
最优化算法python实现篇(2)--无约束一维极值(二分法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 # ...
- 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归
1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...
- 哈希运算python实现_一致性哈希算法 python实现
# -*- coding: utf-8 -*- """ 一致性哈希算法 python实现 参考 http://weblogs.java.net/blog/2007/11/ ...
最新文章
- 英文 电气与计算机工程学报,ei来源刊分为哪三大类?如何区别compendex和ei page one的文章?...
- 耗时两个礼拜,8000字安卓面试长文,建议收藏
- iis设置服务器文件权限设置,iis7如何配置写入权限以上传文件---急急急
- java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例
- 【线程控制:线程休眠】
- 软件设计师08-程序语言基础知识
- 架构分享--微博架构的回顾
- Server Installation for Jitsi Meet 2
- umbrello 用户手册_别克君威车主必备:君威用户手册|君威使用说明书电子版|君威保养手册_搜狐汽车...
- apache2.2 + php5.2.4 + mysql5.0.x 安装配置
- 水晶报表中对某一栏位值进行处理_从主流报表工具的报价看报表行业的报价水深-----常用报表工具对比---主流报表价格对比...
- ImageView显示图像控件
- 通用型免疫(共)沉淀(IP/Co-IP)工具箱(磁珠)实验
- 常用分析模型---5W2H分析模型
- 基于java的高速公路收费系统——计算机毕业设计
- 如何选择期权品种,是做期货期货还是做期权
- a-upload 上传文件到阿里oss
- win10所有浏览器打开一段时间后会自动关闭-未解决
- 美丽的诗句 撩妹首选哦!
- Kotlin项目实战之手机影音---悦单条目实现及BaseListFragment抽取