Python实现SM4算法

SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

  最近在写Python脚本时,需要用到SM4算法,通过百度查找SM4算法实现基本都是基于c语言。用于Python的只有看到一篇http://blog.csdn.net/siddontang/article/details/8952632提到,不过是通过工具将c转换到Python。到GitHub上下载代码来,安装到Python环境,果断出错 o(╥﹏╥)o
  

  看错误提示百度一下vcvarsall.bat,感觉解决起来又是比较麻烦,就是解决这个错误说不定还有其他错误;另一种思路是将c代码编译成dll库在Python中调用,不过也比较麻烦,先得装c的编译器。
  SM4属于分组对称算法,主要是通过sbox做非线性变换,移位操作进行线性变换,难度应该不大。查看SM4的c代码发现确实不是很复杂,于是将其移植到Python语言,简单测试了几组标准数据及2k的文件,可以正常使用。

主要实现的函数有:

1、int型数据及list相互转化,大端模式

def GET_UINT32_BE(key_data):tmp_data = int((key_data[0] << 24) | (key_data[1] << 16) | (key_data[2] << 8) | (key_data[3]))return tmp_datadef PUT_UINT32_BE(n):return [int((n>>24)&0xff), int((n>>16)&0xff), int((n>>8)&0xff), int((n)&0xff)]

2、移位运算

def SHL(x, n):xx = int(int(x << n) & 0xffffffff)return xxdef ROTL(x, n):xx = SHL(x, n)yy = xx | int((x >> (32 - n)) & 0xffffffff)return yy

3、list的异或运算

def XOR(a, b):return list(map(lambda x, y: x ^ y, a, b))

4、S盒变换,也就是查表SboxTable

def sm4Sbox(idx):return SboxTable[idx]

5、外部调用接口

ECB运算:

 sm4_crypt_ecb(mode, key, data)

CBC运算:

sm4_crypt_cbc(mode, key, iv, data)其中,mode:0为加密,1为解密

具体代码参考:链接: https://pan.baidu.com/s/1nwVXzcP 密码: a2f9

总结,将c代码移植到Python比较容易,一些在Python下找不到现有库的算法也可以考虑直接用Python实现。

Python实现SM4算法相关推荐

  1. 国密算法:利用python进行sm4算法的加解密,对称密钥

    本篇利用python中的gmssl库进行sm4算法的加解密演示. 国密算法sm4特点: 密钥长度:16bytes(128bits) 分组长度和密钥长度均为128bits: 是对称加密算法:分为ecb模 ...

  2. python数据结构与算法总结

    python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...

  3. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

  4. sm4算法(附源码、测试代码)

    from:http://blog.csdn.net/mao0514/article/details/52930944 SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的.网址戳 ...

  5. 以图搜图Python实现Hash算法

    以图搜图(一):Python实现dHash算法 http://yshblog.com/blog/43 以图搜图(二):Python实现pHash算法 http://yshblog.com/blog/4 ...

  6. em算法python代码_EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

  7. Python:SMOTE算法——样本不均衡时候生成新样本的算法

    Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...

  8. Python基于聚类算法实现密度聚类(DBSCAN)计算

    本文实例讲述了Python基于聚类算法实现密度聚类(DBSCAN)计算.分享给大家供大家参考,具体如下: 算法思想 基于密度的聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚 ...

  9. NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术

    NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术 导读 带你玩转python实现的语音实时识别技术(包括音频混音.回声消除.噪音滤除.杂音消除.静音检测等方法) 视频观看: 软 ...

  10. python文字识别算法_Python图像处理之图片文字识别(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几 ...

最新文章

  1. 给gridview添加上下移动功能
  2. JQuery元素选择器:和||,逻辑选择
  3. JSP作用域与特殊对象
  4. 50行Python代码,教你获取公众号全部文章
  5. 回忆一 --- 去年6月面试进入公司的日子
  6. C语言 PK 各大编程语言
  7. 微信团队回应“部分用户朋友圈无法刷新”;罗永浩:准备做综艺节目;Apache Spark 3.0 发布| 极客头条...
  8. 如何使用jQuery更改超链接的href
  9. php自定义session存储路径
  10. 在ubuntu用audacity把音频转换成256kbps,单声道。(亲测有效)
  11. 注册免费域名教程(怎样免费注册域名)手把手教注册域名
  12. string之取子串
  13. Vue3 - Suspense 组件介绍及使用方法
  14. 计算机考完试后感想,期中考试后的感想(精选10篇)
  15. 微信小程序广告组件全量开放,开发者可轻松开通
  16. 头脑王者对战游戏html5源码,头脑王者分析笔记及微信小程序解包源码
  17. java socket / IM / Message / chat / liaotian / xmpp
  18. 解决 libpng warning: iCCP: known incorrect sRGB profile
  19. PE制作-002.UEFI和Legacy双启动之Legacy启动
  20. Mac OS 禁止屏幕休眠的方法

热门文章

  1. 继承ActionSupport例子
  2. 后端系统开发之技术方案写作
  3. 基于大数据的软件智能化开发方法与环境
  4. 常用遥感数据下载地址
  5. 精伦身份证阅读器php_精伦IDR210台式身份证读卡器
  6. 架构师如何带领团队“攻城略地”?
  7. 解决pom文件无法导入ojdbc驱动的问题
  8. java编程手册_Java编程手册
  9. 中国水电基础局携手友勤开展2018年P6软件培训班
  10. tt按键精灵从入门到精通完整版