本篇利用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. java人名识别_HanLP中人名识别分析(示例代码)
  2. Django—模板渲染
  3. 创业,程序员心中说不出的痛
  4. android webview webp,iOS WebView中使用webp格式图片的方法
  5. Netty源码学习(零)前言
  6. pycharm连接sqlite
  7. iphone 通过获取IMSI判断运营商
  8. Sage CRM升级注意事项二
  9. 艾伟也谈项目管理,我的项目管理观点
  10. matlab三相系统电阻折算,基于MATLAB三相异步电动机调压调速系统方案.doc
  11. 小学计算机室培训心得,小学计算机培训心得体会
  12. 服务器托管费用怎么计算?
  13. 论文阅读笔记(11):Adaptive Self-Paced Deep Clustering with Data Augmentation,用数据增强的自适应Self-Paced深度聚类
  14. python幂函数无序分布_Python:从幂律分布中生成随机数
  15. CDA Level2建模备考心得
  16. 如何查看windows软件激活状态
  17. Agent with Tangent-based Formulation and Anatomical Perception for Standard Plane Localization in 3D
  18. Java中List集合的addAll方法的小坑
  19. A quick first look at the kernel printk()
  20. PHP+PHPQRcode写一个二维码接口api

热门文章

  1. spring应用上下文的理解
  2. APIJSON使用和搭建
  3. Ubuntu_解决桌面右键无法创建文档的问题
  4. sicp计算机应用基础,Windows 7基础知识
  5. Java编程开发好学吗 怎样才能学好Java编程
  6. HTTP/HTML/浏览器
  7. 实战丨QUIC协议在蚂蚁集团落地
  8. python timeit用法_python中的计时器timeit的使用方法
  9. 3个迹象表明,企业是时候搭建CDP了!
  10. oracle 数据库 时间前一天前一年前一个月