本篇利用python中的gmssl库进行sm4算法的加解密演示。

国密算法sm4特点:

  • 密钥长度:16bytes(128bits)
  • 分组长度和密钥长度均为128bits;
  • 是对称加密算法;分为ecb模式和cbc模式;
  • 明文和密文的长度相同;
  • 同样的数据,同样的key,每次加密结果一样。
  • 与DES和AES算法相似,国密SM4算法是一种分组加密算法。SM4分组密码算法是一种迭代分组密码算法,由加解密算法和密钥扩展算法组成;
  • 加密算法和密钥扩展算法迭代轮数均为32轮;SM4加解密过程的算法相同但是轮密钥的使用顺序相反;
  • SM4密码算法使用模2加和循环移位作为基本运算;
  • 密钥扩展算法:SM4算法使用128位的加密密钥,并采用32轮迭代加密结构,每一轮加密使用一个32位的轮密钥,总共使用32个轮密钥。
    因此需要使用密钥扩展算法,从加密密钥中产生32个轮密钥。

gmssl库中的sm4:

python提供了sm4算法相关的包,可以用导入gmssl包,利用这个包提供的sm4算法进行数据的加解密。

#导入国密算法sm4包
from gmssl import sm4

常用API:

实例化:sm4.CryptSM4()
设置加密密钥key:set_key(key, sm4.SM4_ENCRYPT) # 设置密钥
加密:crypt_ecb(plaintext)

设置解密密钥key:set_key(key, sm4.SM4_DECRYPT) # 设置密钥
解密:crypt_ecb(chipertext)

测试代码:

import binascii#导入国密算法sm4包
from gmssl import sm4def sm4_encode(key, data):"""国密sm4加密:param key: 密钥:param data: 原始数据:return: 密文hex"""sm4Alg = sm4.CryptSM4()  # 实例化sm4sm4Alg.set_key(key.encode(), sm4.SM4_ENCRYPT)  # 设置密钥dateStr = str(data)print("明文:", dateStr);enRes = sm4Alg.crypt_ecb(dateStr.encode())  # 开始加密,bytes类型,ecb模式enHexStr = enRes.hex()print("密文:", enHexStr);return enHexStr # 返回十六进制值# return encrypt_value.hex()  def sm4_decode(key, data):"""国密sm4解密:param key: 密钥:param data: 密文数据:return: 明文hex"""sm4Alg = sm4.CryptSM4()  # 实例化sm4sm4Alg.set_key(key.encode(), sm4.SM4_DECRYPT)  # 设置密钥deRes = sm4Alg.crypt_ecb(bytes.fromhex(data))  # 开始解密。十六进制类型,ecb模式deHexStr = deRes.decode()print("解密后明文:", deRes);print("解密后明文hex:", deHexStr);return deHexStr#测试函数
def test():key = "E1A90FB64DDE12AE";  strData = "12345abcde"enHexRes = sm4_encode(key,strData);print("解密测试===",enHexRes);sm4_decode(key,enHexRes);# main
if __name__ == '__main__':print("main begin");test();

测试结果:

% python sm4_t3.py
main begin
明文: 12345abcde
密文: 39b1d120849884da97b57830de18fb75
解密测试=== 39b1d120849884da97b57830de18fb75
解密后明文: b’12345abcde’
解密后明文hex: 12345abcde

国密算法:利用python进行sm4算法的加解密,对称密钥相关推荐

  1. python二元函数如何编写_利用python实现PSO算法优化二元函数

    python实现PSO算法优化二元函数,具体代码如下所示: import numpy as np import random import matplotlib.pyplot as plt from ...

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

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

  3. 利用 Python 实现 K-means 算法

    利用 Python 实现 K-means 算法   使用 Python 实现K-means算法,采用随机函数随机在二维平面上生成100个点,然后使用所写程序对这100个点进行聚类[可以采用SSE(Su ...

  4. python实现冒泡排序完整算法_利用python实现冒泡排序算法实例代码

    利用python实现冒泡排序算法实例代码 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数 ...

  5. 【机器学习与算法】python手写算法:Cart树

    [机器学习与算法]python手写算法:Cart树 背景 代码 输出示例 背景 Cart树算法原理即遍历每个变量的每个分裂节点,找到增益(gini或entropy)最大的分裂节点进行二叉分割. 这里只 ...

  6. 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!

    来源/早起Python 本文将分享如何利用 Python 对 PDF 进行加密和解密操作,主要利用到之前多次介绍过的PyPDF2 模块. PDF 加密 在之前的文章PDF合并.拆分.水印.加密中简单提 ...

  7. python录入数据至ppt_利用Python进行数据分析之 数据加载.ppt

    利用Python进行数据分析之 数据加载 " " " " 数据加载,存储与文件格式 1,读写文本格式数据: (read_csv,read_table,read_ ...

  8. python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...

  9. 基于mbedTLS算法库实现国密SM2签名和验签算法

    网上有大量的基于OpenSSL实现的国密算法库,比如著名的GmSSL,可以直接拿来用.我自己常用的是mbedTLS的算法库,比较小巧简单,在mbedTLS的大数算法的基础上实现了国密SM2的签名和验签 ...

最新文章

  1. CRNN竞赛程序实现过程
  2. linux软件包安装方式汇总
  3. DCMTK:OFStandard中base64代码的测试程序
  4. 最近新学的小东西和单词
  5. python模块里的函数及说明,Python模块 time与datetime模块的函数说明及使用实例
  6. 华为ipd项目管理流程_IPD:一套卓越的产品开发经营体系
  7. 加拿大生信开源学习资源Bioinformatics.ca
  8. Spring Boot系列教程八: Mybatis使用分页插件PageHelper
  9. 2017百度之星初赛:A-1005. 今夕何夕
  10. 过去的一年,2013!
  11. 读完两遍《STL源码剖析》后,我发现了一些辛秘
  12. 程序猿代码面试指南 PDF
  13. 常用语料库语言学相关软件下载
  14. 解决WPS每点击一下保存,就会出现tmp文件
  15. tig 命令快捷键功能
  16. 许昌学院校园网服务大厅模拟登录
  17. 西班牙航行家眼中的明朝中国
  18. 如何快速找到不与任何道路相连的路
  19. python爬虫登录网站_主流网站 Python 爬虫模拟登陆方法汇总
  20. 如何用阿里云服务器建站(新手全流程)

热门文章

  1. ZLIB压缩数据格式规范v3.3
  2. MySQL 的数据库错误日志设置
  3. CrashPad在Windows下的使用
  4. 调试程序DEBUG命令说明
  5. 熊猫党是什么_被熊猫4.0击中是什么感觉
  6. 若依ruoyi左侧菜单栏增加新的主题色
  7. zynq中mgtx应用_fpga,zynq
  8. 卫星html5源码,微信开发HTML5轻游戏中的几个坑
  9. 【智能汽车,未来最强的算力终端】-转载
  10. moto z2 force ATT版升级至8.0教程