【ARM 安全系列介绍 3.7 -- SM4 对称加密算】


请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | GCC | CSH | Armv8/v9 系统异常分析】


文章目录

    • SM4 加密算法简介
      • SM4 工作模式
      • 算法步骤
      • 加密举例
      • 注意事项

在这里插入图片描述

Principle of SM4 encryption algorithm

SM4 加密算法简介

SM4是一种分组对称加密标准,由中国国家密码管理局所制定,属于国家商用密码算法系列之一。它在国内广泛用于金融、电子政务等领域的数据保护。SM4算法的核心特点包括:

  • 分组长度:128位。
  • 密钥长度:128位。
  • 轮数:32轮。
  • 加密与解密:使用相同的算法结构(轮函数和轮密钥生成算法相同),密钥调度算法产生的轮密钥顺序相反。

SM 系列主要分为 SM2、SM3、SM4。其中SM2为非对称加密算法SM3为哈希摘要算法SM4为对称加密算法。

SM4 工作模式

与其他对称加密算法一样,SM4可以在多种工作模式下运行,例如ECB(电子密码本模式)、CBC(密码块链接模式)、CFB(密码反馈模式)、OFB(输出反馈模式)和CTR(计数器模式)等。

算法步骤

  1. 密钥扩展:将128位密钥扩展为32个轮密钥。
  2. 初始变换:输入的128位明文经过初始置换。
  3. 轮函数:对数据块进行32轮加密或解密处理。
  4. 反初始变换:将最终的数据块进行一次反向置换,得到密文或明文。

加密举例

以下是一个SM4加密的简化示例,考虑到SM4算法的复杂性,这里不展示具体的算法实现代码,而是提供一个使用Python中的第三方库进行SM4加密解密的示例。
假设您已经安装了支持SM4的第三方库(如gmssl),则可以这样进行加密和解密:

from gmssl import sm4, func
# 密钥和明文(都需要是16字节的十六进制字符串)
key = b'0123456789abcdeffedcba9876543210'
plaintext = b'0123456789abcdeffedcba9876543210'# 创建SM4对象
crypt_sm4 = sm4.CryptSM4()# 设置密钥并加密
crypt_sm4.set_key(key, sm4.SM4_ENCRYPT)
ciphertext = crypt_sm4.crypt_ecb(plaintext)  # ECB模式加密
print("Ciphertext (ECB):", func.bytes_to_list(ciphertext))# 设置密钥并解密
crypt_sm4.set_key(key, sm4.SM4_DECRYPT)
decrypt_text = crypt_sm4.crypt_ecb(ciphertext)  # ECB模式解密
print("Decrypted Text (ECB):", func.bytes_to_list(decrypt_text))

注意事项

  • 在实际应用中,加密密钥应该是随机生成的,保证足够的安全性。
  • 为了提高安全性,除非特别需要,尽量避免使用ECB模式,因为它对于同一密钥和相同的明文块总是产生相同的密文块,可能会泄露一些模式信息。
  • 在使用对称加密算法时,密钥的保管和传输非常重要,需要通过安全的方式进行。

以上信息提供了SM4算法的概述和一个加密解密的基本例子,实际应用中可能需调整代码以满足特定的安全要求和性能考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何基于Redis实现分布式锁?

分布式锁介绍 对于单机多线程来说,在 Java 中,我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。 下面是我对本地锁画的一张示意图。 本地锁 从图中可以看出&#xf…

Unity 限时免费资源 - FANTASTIC万圣节资源包

Unity 资源 - FANTASTIC - Halloween Pack 万圣节包 前言资源包内容领取兑换码 前言 亲爱的 Unity 游戏开发者们,今天要给大家介绍一款限时免费的优质资源包 - FANTASTIC - Halloween Pack 万圣节资源包。 这个资源包为您的游戏创作带来了丰富的万圣节主题元素。其…

开关阀(3):Fisher DVC6200定位器原理及调试

Fisher DVC6200---Digital Valve Controllers( 数字阀门控制器)简写 DVC,而6200是Fisher DVC定位器发展的一个系列型号,是Fisher结合DVC2000、DVC6000系列,取其特点发展的有着高适用性和高可靠性的阀门定位器。 DVC6200 原理&…

线性代数|机器学习-P17矩阵A逆和奇异值的导数

文章目录 1. A 2 A^2 A2关于时间的导数2. 奇异值 σ \sigma σ 关于时间的导数3. 迭代特征值3.1 交替特征值3.2 ST 矩阵最大特征值 4. 瑞利商的思考4.1 瑞利商的定义4.2 性质1 1. A 2 A^2 A2关于时间的导数 我们在已知 d A d t \frac{\mathrm{d}A}{\mathrm{d}t} dtdA​的情…

Apriori 处理ALLElectronics事务数据

通过Apriori算法挖掘以下事务集合的频繁项集: 流程图 代码 # 导入必要的库 from itertools import combinations# 定义Apriori算法函数 def apriori(transactions, min_support, min_confidence):# 遍历数据,统计每个项的支持度 item_support {}for tr…

AI数据分析:根据时间序列数据生成动态条形图

动态条形竞赛图(Bar Chart Race)是一种通过动画展示分类数据随时间变化的可视化工具。它通过动态条形图的形式,展示不同类别在不同时间点的数据排名和变化情况。这种图表非常适合用来展示时间序列数据的变化,能够直观地显示数据随…

移动端vue+vant4选择日期+时间,返回结果是:2024-07-23 10:27格式

环境&#xff1a;vue3、 vant4、vite <van-popup v-model:show"showPicker" round position"bottom"><van-picker-grouptitle"预约日期":tabs"[选择日期, 选择时间]"next-step-text"下一步"confirm"onConfir…

亚马逊卖家注册业务类型怎么选?VC账号能申请?

在亚马逊卖家注册时&#xff0c;业务类型的选择是非常重要的&#xff0c;因为它将直接影响您的销售策略、费用结构以及您在平台上的权限。目前&#xff0c;亚马逊主要的卖家业务类型包括专业卖家和个人卖家&#xff0c;而VC&#xff08;Vendor Central&#xff09;账号和VE&…

Camtasia2024中文版最新电脑录屏剪辑神器!

大家好&#xff0c;今天我要安利一个我最近超级喜欢的工具——Camtasia2024中文版&#xff01;这款软件真的太棒了&#xff0c;它让我的视频编辑工作变得更加轻松和高效。如果你也对视频制作感兴趣&#xff0c;那么一定要尝试一下这款神器哦&#xff01; Camtasia2024win-正式…

那在中国,版权保护方面还有哪些缺陷?能否运用区块链技术解决?

目录 一、主要缺陷 1. 版权确权困难 2. 侵权行为难以追踪 3. 维权难度大 4. 中介机构效率低下 5. 盗版问题严重 二、 区块链技术的具体应用 1. 版权确权与存证 2. 智能合约 3. 作品追踪与溯源 4. 分布式存储 5. 数字身份认证 三、 结论 中国在版权保护方面虽然已经…

动态规划02(Leetcode62、63、343、96)

参考资料&#xff1a; https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html 62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移…

VBA:demo大全

VBA常用小代码合集&#xff0c;总有一个是您用得上的~ (qq.com) 如何在各个分表创建返回总表的命令按钮&#xff1f; 今天再来给大家聊一下如何使用VBA代码&#xff0c;只需一键&#xff0c;即可在各个分表生成返回总表的按钮。 示例代码如下&#xff1a; Sub Mybutton()Dim …

NeRF从入门到放弃3: EmerNeRF

https://github.com/NVlabs/EmerNeRF 该方法是Nvidia提出的&#xff0c;其亮点是不需要额外的2D、3Dbox先验&#xff0c;可以自动解耦动静field。 核心思想&#xff1a; 1. 动、静filed都用hash grid编码&#xff0c;动态filed比静态多了时间t&#xff0c;静态的hash编码输入是…

数据虚拟化、Data Fabric(数据编织)的兴起,对数据管理有何帮助?

数字化时代&#xff0c;虚拟化&#xff08;Virtualization&#xff09;并不是一个很陌生的词汇&#xff0c;它是现代数据中心资源管理的核心技术之一&#xff0c;是对 IT 资源&#xff08;如服务器、存储设备、网络设备等&#xff09;的抽象&#xff0c;通过屏蔽 IT 资源的物理…

shell expr功能详解

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。它还具个特殊功能&#xff0c;判断变量或参数是否为整数、是否为空、是否为0等。 1.字符串表达式 ------------------------- expr支持模式匹配和字符串操作。字符串表达式的优先…

AttributeError: ‘AlexNet‘ object has no attribute ‘module‘

当你尝试执行 model model.module 并收到错误消息 AttributeError: AlexNet object has no attribute module&#xff0c;这意味着你正在操作的模型对象&#xff08;在这个例子中是 AlexNet 类的一个实例&#xff09;并没有 module 这个属性。这个错误通常发生在以下几种情况&…

长度单位对比(英制和通用制)

0 Preface/Forewod 1 单位换算 1.1 英制单位 常见的英制长度单位如下&#xff1a; inch&#xff0c;英尺foot&#xff0c;英寸mile &#xff0c;英里 1.2 换算公式 1 inch 2.54 cm 1 yard 3 inch 1 foot 12 inch 12 * 2.54 cm 30.48 cm 1 foot 4 yard 1 mile …

Hutool工具简单用法

1、安装(POM) <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.16</version> </dependency> 2、使用 1、DateUtil //当前时间 Date date DateUtil.date(); //…

音乐管理系统

摘 要 现如今&#xff0c;在信息快速发展的时代&#xff0c;互联网已经成了人们在日常生活中进行信息交流的重要平台。看起来&#xff0c;听歌只是一种消遣和消遣&#xff0c;其实&#xff0c;只要你选对了曲子&#xff0c;就会产生许多不同的作用。音乐能舒缓身心&#xff0c…

你好,复变函数2.0

第一行&#xff1a;0 或 1 第二行&#xff1a;&#xff08;空格&#xff09;函数&#xff08;后缀&#xff09; #pragma warning(disable:4996) #include <easyx.h> #include <stdio.h> #include <math.h> #define PI 3.141592653589793 #define E 2.71828…