sm4 无线局域网产品使用的 SMS4 密码算法 本算法是一个分组算法。该算法的分组长度为 128 比特,密钥长度为 128 比特。加密算 法与密钥扩展算法都采用 32 轮非线性迭代结构。
前言 项目里需要用到sm4加密,在这里记录一下(springboot)。 SM4Util.class); private static final String PROVIDER_NAME = “BC”; public static final String ALGORITHM_NAME = “SM4 ”; public static final String ALGORITHM_NAME_ECB_PADDING = “SM4/ECB/PKCS5Padding”; public static final String ALGORITHM_NAME_CBC_PADDING = “SM4/CBC/PKCS5Padding”; public static final String DEFAULT_KEY = NoSuchProviderException | NoSuchAlgorithmException | InvalidKeyException var5) { throw new GeneralSecurityException(“SM4
harmony-utils之SM4,SM4加解密harmony-utils 简介与说明harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { AppUtil.init(this.context); }SM4 算法简介SM4是中国自主研发的商用对称加密算法,由国家密码管理局于2006年发布,2012年成为国家密码行业标准(GM/T 0002-2012)。 作为中国密码体系(SM系列)的核心组件,SM4广泛应用于金融支付、电子政务、物联网等领域,满足国产密码合规要求。 SM4 应用场景金融支付:在银行卡交易、移动支付及网上银行中加密敏感数据(如交易金额、账户信息),确保传输安全并符合中国金融行业密码合规要求;电子政务:用于电子身份证、政务系统数据传输加密,结合SM2签名算法实现身份认证与数据完整性保护
1、SM4简介 https://baike.baidu.com/item/SM4.0/3901780 2、引入SM4的依赖包 在pom.xml中增加SM4的依赖包。 groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.59</version> </dependency> 3、项目中使用 封装好SM4 //身份证、手机号SM4加密存储 sysBfinfo.setLeaderIdcard(SM4Util.encryptEcb(SM4Util.hexKey,sysBfinfo.getLeaderIdcard ())); sysBfinfo.setPhone(SM4Util.encryptEcb(SM4Util.hexKey,sysBfinfo.getPhone())); //身份证、手机号SM4解密 String "; public static final String ALGORITHM_NAME_CBC_PADDING = "SM4/CBC/PKCS5Padding"; public static
对称加密简单来说就是有一个明文,通过一个密钥加密之后得到一个密文,这个密文可以通过相同的密要解密得出和原来相同的明文 二、sm4算法 算法定义:SM4算法是一种分组密码算法。 SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。 ⊕ 异或 <<<i 循环左移i位 3.算法实现 即首先执行32次轮函数迭代运算,然后在对最后一轮数据反序变换并得到密文输出 三、步骤详解 1.轮函数F 示意图 SM4 java.util.Arrays; import java.util.Random; /** * @ClassName: Sm4Util * @Author: tanp * @Description: sm4 fr=search SM4算法及实现方式:http://www.mamicode.com/info-detail-2603734.html SM4加密解密:https://blog.csdn.net/Mr_ye931
国密sm4加解密算法工具类,可用于生产环境 package com.example.demo.endecryption.utils; import org.apache.commons.codec.binary.Base64 java.nio.charset.Charset; import java.security.InvalidKeyException; import java.security.Security; /** * 国密sm4 加解密 */ public class Sm4Util { public enum Algorithm { SM4("SM4","SM4","key长度:16 byte"); private String BadPaddingException { return cipherDoFinal(algorithm, Cipher.DECRYPT_MODE, key, data); } } 测试 /** * 国密sm4
最近工作需要用到SM4加密解密算法,所以研究了一下。 内容主要参考自:https://blog.csdn.net/weixin_34411563/article/details/86000381 首先介绍一下SM4加密算法 SM4是我们自己国家的一个分组密码算法 http://www.cnnic.net.cn/jscx/mixbz/sm4/,具体的加密很麻烦,我也只看了下简单介绍。 ()); } private static final String ENCODING = "UTF-8"; public static final String ALGORITHM_NAME = "SM4 -以8个字节为一组进行分组加密 // 定义分组加密模式使用:PKCS5Padding public static final String ALGORITHM_NAME_ECB_PADDING = "SM4
其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用 二、SM4算法 2.1算法背景 SM4算法是用于WAPI的分组密码算法,是2006年我国国家密码管理局公布的国内第一个商用密码算法 SM4算法的设计目标是替代国际通用的AES算法,适用于无线局域网、金融支付、物联网等场景的数据加密。 2.2算法特点 分组长度和密钥长度:SM4算法的分组长度和密钥长度均为128位(16字节)。 安全性:SM4算法的安全性经过严格评估,能够抵御差分攻击、线性攻击等常见密码分析方法。 2.3 基本部件 SM4密码算法的基本运算有模2加和循环移位。 抗攻击能力:SM4算法的S盒设计和线性变换结构能够有效抵御差分攻击、线性攻击等常见密码分析方法。 国际认可:SM4算法已成为国际标准,表明其设计通过了国际密码学界的审查。 2.7 应用场景 无线局域网(WLAN):SM4算法是中国无线局域网标准(WAPI)中推荐的加密算法。 金融支付:在移动支付、网上银行等场景中,SM4算法用于保护敏感数据。
打算去支持一下于是看了一下官方文档就准备把自己之前的项目重构一下,我自己的项目中权限框架用的springsecurity做用户密码加密的时候直接用自带的就行,但是换成Sa-Token之后据我现在所知里边没有可用的对密码进行加密的工具类,所以我选择的国密SM4 但是有一个问题因为我们的数据库可能随时挂掉,这就有一个问题了,在SM4加密的时候,我们的秘钥是动态的,每次产生的秘钥都是不一样的,他保存在类似于ThreadLocal这种上下文中,我们下次用的时候会从上下文中取出来
分享一篇SM4加密算法实现文章,算法用C语言即可实现,只有短短300多行代码。 SMS4是我国无线局域网标准WAPI中所采用的分组密码标准,随后被我国商用密码标准采用,又名SM4(SM是“商密”的缩写,目前公布的其他商密标准包括SM2椭圆曲线公钥密码,SM3密码杂凑算法)。 SM4的密钥长度和分组长度均为128比特,其设计安全性等同于AES-128。 我对加密算法进行了一个封装,可以直接用来加密文件,我的封装方法是:由于SM4的密钥长度和分组长度均为128比特(16个字节),所以我们必须要对密码和明文进行处理,最简单就是补齐16字节,密码规定最大只能是 < SM4 subkeys */ }sm4_context; /** * \brief SM4 key schedule (128-bit, encryption)
1、SM4算法简介 中国国家密码管理局于2006年1月6日发布第7号公告,将我国无线局域网产品的加密算法确定为SM4算法(原SMS4)。这是国内官方公布的第一个商用密码算法。 SM4分组密码算法是一个迭代分钟密码算法,由加解密算法和密钥扩展算法组成,SM4分组密码算法采用非平衡Feistel结构,明文分组长度为128bit,密钥长度为128bit。 在SM4算法中S盒是固定不变的,而且系统参数CKi的取值也是不变的,系统参数一共有32个。 SM4的解密过程与加密过程结构完全相同,不同的仅仅是轮秘钥的使用顺序。 加密轮密钥的使用顺序是 , 而解密时密钥的使用顺序为加密时候的反序: 2、密码算法程序各模块详细设计 2.1 核心模块主要实现算法的流程 图1 SM4加密算法流程示意图 图2 SM4密钥扩展算法流程图 解密算法核心代码 SM4的解密算法与加密算法类似,唯一不同之处就是使用的轮子密钥的顺序不同,SM4解密使用的轮子密钥与加密使用的轮子密钥正好顺序相反。
于是乎,经过测试和思考,最终决定对加密算法进行升级,用SM4算法。 我准备研究SM4算法的时候,中国互联网络信息中心里已经不提供SM4算法的标准文档了,所以只能去网上查阅资料。感谢一文带你学会国产加密算法SM4的java实现方案这篇文章。 ? 1、SM4算法的原理 结构图: ? 我们能看出来,明文加上128bit的秘钥,进过多轮变换,最后输出是加密的反序,解密时只是将轮密钥的使用顺序进行逆向进行。 2、SM4加密算法应用场景 SM4常用于政府系统的数据传输加密,我们使用前端向后端传递信息,或者分布式场景下不同模块之间的调用,可以使用此算法。 3、SM4算法java的实现 现在我就来简单的实现一下SM4算法的加解密功能 首先是一些常数值,包括编码,算法名,秘钥长度等,如果可以的写成参数值最好。
我们在使用加密算法时,有必要选择使用国密算法进行加密 ---- 一、国密SM4是什么? 国密即国家密码局认定的国产密码算法。 主要有SM1,SM2,SM3,SM4。 SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。 //key必须是16字节,即128位 final static String key = "sm4demo123456789"; //指明加密算法和秘钥 static SymmetricCrypto sm4 SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding"); 2.3 使用SmUtil快速创建SymmetricCrypto对象 //不带秘钥 SymmetricCrypto sm4 = SmUtil.sm4(); //带秘钥 String key = "1234567812345678"; SymmetricCrypto sm4
原文 | https://dwz.cn/zJwokV1S 整理 | 程序猿杂货铺 我的名字叫 SM4,我还有三位兄长,分别是大哥 SM1, 二哥 SM2, 和三哥 SM3。 说起我的名字,故事要回到2006 年的时候,我出生的时候并不是叫 SM4 的,而是叫做 SMS4。只是 2012 年的时候我父亲给我改名了。虽然我起了一个洋气的名字,但我必须郑重地说,我是一个中国人。 《SM4 分组密码算法标准英文文本》下载地址:http://suo.im/52YK0H (公众号后台回复【SM4】可以获取 PDF 版本) 我的实现 后面陆陆续续,有很多语言根据我的标准进行了实现,包括 下面贴一下我的好朋友 Java 实现中的关键轮函数(代码量比较大,限于篇幅,此处就不全部贴出来,想进一步了解的后台可以回复【SM4】获取完整代码)。 /** * 轮函数F。
sm2和sm4加密算法浅析 一: SM2 简介:SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 ,SM2为非对称加密,基于ECC。该算法已公开。 F2660BE1 715A4589 334C74C7 Gy=BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0 二:SM4 简介:SM4由国家密码管理局于2012年3月21日发布,SM4 无线局域网标准的分组数据算法。
SM4加密算法 密码算法中常用的一些数据单位: 位/比特/bit:指一个二进制位。 字节/byte:1字节=8位 [公式] 字/word:1字=4字节=32位 [公式] SM4是一种分组密码算法,其分组长度为128位(即16字节,4字),密钥长度也为128位(即16字节,4字)。 SM4的解密过程与加密过程完全相同,也包括32轮迭代和一次反序变换。只是在轮迭代的时候,需要将轮密钥逆序使用。 >1.69</version> </dependency> 代码块 @Test void contextLoads() { String content="123456"; SM4 sm4 = SmUtil.sm4(); String encryptHex = sm4.encryptHex(content); String decryptStr = sm4.decryptStr
文章目录 一.算法原理描述 1.密钥及密钥参量: 2.加密算法: 3.解密算法: 4.密钥扩展算法: 二.C语言算法实现 .h部分代码: .c部分代码: 一.算法原理描述 SM4分组密码算法是一个迭代分组密码算法 SM4分组密码算法采用非平衡Feistel结构,分组长度为128b(16byte)密钥长度为128b(16byte)。加密算法与密钥扩展算法均采用非线性迭代结构。 但可以自行补足字节来做到任意长度字节数据加密,后面C语言实现部分有所体现) 1.密钥及密钥参量: SM4分组密码算法的加密密钥长度为128b,表示为MK=(MK0,MK1,MK2,MK3),其中MKi( 2.加密算法: SM4加密算法由32次迭代运算和1次反序变换R组成 设明文输入为(X0,X1,X2,X3)∈(Z232)4,密文输出为(Y0,Y1,Y2,Y3)∈(Z232)4,轮密钥为rki∈Z232
一、国密SM3与SM4 国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。 不懂也没关系,以后别人说SM2、SM3、SM4知道它们是干啥的就行。这次主要和大家从简单的SM3、SM4说起。 SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。 要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。 SM4简单举例: int main(){ unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
最近看了一个项目的代码,用到了SM2,SM3,SM4,瞬间懵逼,一会用SM2,一会用SM3,一会又用SM4,SM??? ? 简单来说,SM2,SM3,SM4 是国家密码局认定的国产密码算法,当然除了这几个算法,还有SM1,SM7,SM9,祖冲之密码算法等。 SM4 是一种对称加密算法,可用于替代DES/AES等国际算法, SM4算法与AES算法具有相同的密钥长度和分组长度,都是128位。 了解了SM2, SM3, SM4这些算法之后,在我们的系统中就可以应用这些算法来对传输的报文进行加解密;一个简单的流程图如下所示: ? SM4 Java 实现 下下一篇,敬请期待。
根据加密算法获取密码iv长度 */ $ivLength = openssl_cipher_iv_length($cipherAlgo); printf("[SM4加密iv长度]: %s\n", $ivLength 把生成的key值 ASCII 字符的字符串转换为十六进制值 */ $key = bin2hex($keyASCII); printf("[SM4加密key值]: %s\n", $key); /** 初始化向量转换为十六进制值 */ $iv = bin2hex($ivBytes); // 国密SM4算法这里会生成16位随机数,如:"0123456789123456" printf("[SM4加密iv = openssl_decrypt($encryptedStr, $cipherAlgo, hex2bin($key), OPENSSL_CIPHER_RC2_40, $iv); printf("[SM4 php /** * @desc 国密 SM4 加解密 * @author Tinywan(ShaoBo Wan) * @email 756684177@qq.com * @date 2023/11