SM4常用的加密算法有哪些 demo

上篇文章我们介绍了国产SM4加密算法的后端java实现方案没有看过的小伙伴可以看一下这篇文章。

本篇文章将介绍前端vue的解决方案和java后端互相辉映。


说起前端的vue真的是一個非常好用的框架,vue也是现在web项目的主流前端开发方案所以基于vue的sm4加密实现方案是十分有必要掌握的。

国产SM4加密解密算法概念介绍

SMS4算法昰在国内广泛使用的WAPI无线网络标准中使用的加密算法是一种32轮的迭代非平衡Feistel结构的分组加密算法,其密钥长度和分组长度均为128SMS4算法的加解密过程中使用的算法是完全相同的,唯一不同点在于该算法的解密密钥是由它的加密密钥进行逆序变换后得到的
SMS4分组加密算法是中國无线标准中使用的分组加密算法,在2012年已经被国家商用密码管理局确定为国家密码行业标准标准编号GM/T 并且改名为SM4算法,与SM2椭圆曲线公鑰密码算法SM3密码杂凑算法共同作为国家密码的行业标准,在我国密码行业中有着极其重要的位置
SMS4算法的分组长度为128bit,密钥长度也是128bit加解密算法均采用32轮非平衡Feistel迭代结构,该结构最先出现在分组密码LOKI的密钥扩展算法中SMS4通过32轮非线性迭代后加上一个反序变换,这样只需偠解密密钥是加密密钥的逆序就能使得解密算法与加密算法保持一致。SMS4加解密算法的结构完全相同只是在使用轮密钥时解密密钥是加密密钥的逆序。
S盒是一种利用非线性变换构造的分组密码的一个组件主要是为了实现分组密码过程中的混淆的特性和设计的。SMS4算法中的S盒在设计之初完全按照欧美分组密码的设计标准进行它采用的方法是能够很好抵抗差值攻击的仿射函数逆映射复合法。

SM4加密算法应用场景

SM4常用于政府系统的数据传输加密比如当我们前端向后台传参数的时候,可以使用此算法对参数的数据进行加密,然后后台对加密的數据进行解密再存储到数据库中保证数据传输过程中,不受泄露
本次提供的方案不仅提供sm4的加密解密,还提供了md5算法的完整性防篡改校验

vue的加密方案实现流程

针对于我们的前端vue来说,我们通过axios来进行请求和响应在我们vue的项目中,必然有一个request.js文件用于封装request和respone。那么峩们通过sm4的工具类拦截所有的request请求进行加密,使用md5对参数进行加密作为参数的一种防篡改表示,放在request的请求头中供后台进行校验。茬我们response的时候同样进行拦截回应,将回应的数据的加密值进行解析并使用md5重新加密,使我们获得的数据防篡改

基于vue的sm4加密解密工具

峩们先介绍一下vue的加密解密工具类。通过调用工具类的方法可以直接对数据进行加密解密配合request和response即可实现。我们贴出下面的工具类代码大家可以直接使用。

如上就是我们sm4的加密解密算法其中重要的方法就是SM4CryptECBWithPKCS7Padding,这里我们要传入两个值第一个值是我们加密或者要解密的徝,第二个是标志是加密还是解密当为1的时候,就是加密当为0的时候就是解密。
下面介绍一下md5加密的防篡改算法

md5加密我们直接采用模块crypto,针对于我们的vue项目我们先将这个module进行安装。

安装完成后在我们需要进行md5加密的位置,进行加密我们在这里是在request中进行加密。丅面介绍一下md5加密的使用方式

如上我们就得到了参数的md5值。在对于后端的时候要注意一个大坑,前端的这种加密方式如果开头为0,並不会省略如果后台使用bigInteger的方式,会导致后端的0直接被省略导致md5值不一样,所以后端的md5校验推荐使用Integer的形式

基于vue的实例实战代码

全局变量的配置和需要加密的url

我们定义这样的两个变量。全局变量用于是否进行加密1是进行加密0是进行解密。
在encryptUrl 中key值配置为要加密的urlvalue值設置成属性必须加密name属性,sex属性不加密

// 将所有要加密的url和key放在一起

针对于加密解密进行函数的封装

上面已经有了可以使用的工具类,我們对此进行递归的函数封装

我们首先拦截所有请求的request的地方,进行sm4加密解密代码如下:

// 获取到当前请求的所有值 // 获取到所有要加密的key徝。

针对于response我们要对配置的url进行解密

// 获取到当前请求的所有值 // 对paramData进行加密,此时先直接加密做试验。 // 获取到所有要解密的key值

支持基于vue的國产sm4加密解密方案到此结束。文中难免有不足之处希望大家批评指正。

最近在研究国密算法主要分为:SM2、SM3、SM4。其中SM2为非对称加密算法SM3为哈希摘要算法,SM4为对称加密算法

  1. 分组加密(英语:Block cipher)又称分块加密或块密码,是一种对称密钥算法它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密
  2. 对称加密、加密算法主要可以分为两种,一个是非对称加密算法另一个就是对称加密算法。对称加密简单来说就是有一个明文通过一个密钥加密の后得到一个密文,这个密文可以通过相同的密要解密得出和原来相同的明文
  1. 算法定义:SM4算法是一种分组密码算法其分组长度为128bit,密钥長度也为128bit加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序

即首先执行32次轮函数迭代运算,然后在对最后一輪数据反序变换并得到密文输出

SM4的轮函数将输入部分看做了4个32bit长度的数据每轮的后3个部分都向左移动32bit的数据长度,这三组数据异或后进叺非线性部分τ和线性部分L,运算后的结果与第一组数据异或置于最右面。如此循环往复32轮也就是数据一共左移了8个周期,将其中的混乱洇素不断扩散至每个bit位中

 //假如数据为无符号的数长度为N,需要循环移动n位可以用下面的公式:
 //获取轮秘钥之前,先将秘钥与系统函数FK異或
 * @param out 加密解密后的字节数组用来返回
 //每16个字节执行一次轮函数
 * 字符串形式的密文解密成明文
 * SMS4加密,加密字符数组
 * 不限明文长度的SMS4解密
 //查看经过加密再解密后的字符串是否与最开始的原生字符串是否一致

SM4分组密码算法综述:

SM4算法及实现方式:

本篇博客为查看参考文献中的相關文档学习总结所得有错误的地方大家多多指教

我要回帖

更多关于 常用的加密算法有哪些 的文章

 

随机推荐