【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 原理&…

Apriori 处理ALLElectronics事务数据

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

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

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

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

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

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

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

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

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

VBA:demo大全

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

NeRF从入门到放弃3: EmerNeRF

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

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

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

音乐管理系统

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

解决 执行 jar 命令 控制台乱码

Springboot项目&#xff0c;编码为utf8 打包后&#xff0c;为了在控制台运行时不乱码&#xff0c;需要在控制台中依次执行以下命令&#xff1a; 第一步&#xff1a; chcp 65001第二步&#xff1a; java -jar -Dfile.encodingutf-8 你的.jar

数字营销新玩法:拓新与裂变的完美结合

在当今这个飞速发展的数字化时代&#xff0c;数字营销已经成为了企业发展中至关重要的一环。拓新&#xff0c;简单来说就是不断去开拓新的客户群体&#xff0c;让更多的人了解并接触到我们的产品或服务。要做到这一点&#xff0c;那可得充分利用各种线上渠道。像热闹非凡的社交…

免费开源的地图解析工具【快速上手】

视频学习地址 这篇文章和【Nominatim】是相呼应的&#xff0c;在尝试了OSM数据一直有问题之后&#xff0c;通过别人的指点是不是可以换个思路&#xff0c;我的数据只需要精确到市级别&#xff0c;也可以不用OSM这样全的数据&#xff08;主要原因还是OSM太过庞大了&#xff09; …

软银CEO孙正义:10年内将出现比人类聪明1万倍的人工智能|TodayAI

2024年6月20日&#xff0c;软银集团公司&#xff08;SoftBank&#xff09;董事长兼首席执行官孙正义在日本东京举行的公司年度股东大会上发表讲话&#xff0c;表示比人类聪明1万倍的人工智能将在10年内出现。这是他近年来一次罕见的公开露面&#xff0c;在会上他质疑了自己的人…

连接和断开信号演示之二

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>void button_press(GtkEventBox *ebox,GdkEventButton *event,GtkLabel *label) {const char *citem;switch(event->type…

银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务

银河麒麟官网地址&#xff1a;国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令&#xff1a;nkvers 我的是 release V10 (SP1)&#xff0c;根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找&#xff0c; 要是随便找个Centos的rp…

云安全下的等级保护2.0解决方案

云安全解决方案 知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 ​