# JS-SM4 **Repository Path**: MuNitCat/JS-SM4 ## Basic Information - **Project Name**: JS-SM4 - **Description**: No description available - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-04-08 - **Last Updated**: 2023-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Web的SM4.0加密算法组件 ## 起步 需要先在命令行执行依赖项的安装 ``` yarn install 或者 npm i ``` 打包(bulid)的时候需要注意 vue.config.js 中配置的路径,部署在服务器上的路径和本地的包路径有所不同 ```js publicPath: "./", //为本地文件的路径 ``` ## 项目简介 这是一次学校的课设要求,主要还是学习国密SM4.0加密算法。该项目未接入后端,一切的计算均在本地通过JavaScript实现。网上的多数的版本都是java版本,该项目参考java版本的sm4.0加密算法进行了相应的改版。 主要是一个使用SM4进行在线加解密的网页,用户输入密钥和明文后,可以快速生成密文,同时它也提供了解密的功能,可以使用户进行SM4的加解密操作。并且,如果用户需要详细的加解密过程,该网页可以将其轮密钥的生成过程和加密过程进行展示,方便用户进行查看和复制学习 项目在线部署的地址(2021.6):https://testingecs.top/sm4/ 项目源文件结构目录 ``` ├─ .eslintrc.js ├─ .gitignore ├─ babel.config.js ├─ buzhou.dio ├─ jsconfig.json ├─ package-lock.json ├─ package.json ├─ public │ ├─ favicon.ico │ └─ index.html ├─ README.md ├─ src │ ├─ App.vue │ ├─ assets │ │ └─ images │ ├─ components │ │ ├─ about │ │ │ └─ index.vue │ │ ├─ layout │ │ │ └─ index.vue │ │ ├─ process │ │ │ └─ index.vue │ │ ├─ shoadow │ │ │ └─ index.vue │ │ └─ sm4Form │ │ ├─ config.less │ │ ├─ cryptForm.vue │ │ ├─ index.vue │ │ └─ result.vue │ ├─ index.less │ ├─ main.js │ ├─ util │ │ ├─ rem.js │ │ ├─ SM4 │ │ │ ├─ index.js │ │ │ └─ sm4.js │ │ └─ utils.js │ └─ views │ └─ main │ └─ index.vue ├─ vue.config.js └─ yarn.lock ``` ## SM4.0加密算法 #### 基本运算 在SM4.0算法中主要采用了两种基本运算 32比特异或运算、32位比特循环左移i位。 #### 轮密钥的生成 将初始密钥分为4份长度为32的密钥,并分别与FK0,FK1,FK2,FK3进行**异或处理**得到K0,K1,K2,K3,然后根据公式![img](./src/assets/clip_image001.png))算出K4到K31的轮密钥 其中FK为常量,CK也为固定参数 ![img](./buzhou01.png) #### 加密过程 把128位的报文拆分为4组32位的片段,分别为X1,X2,X3,X4,然后经由函数![img](./src/assets/clip_image002.gif))处理,每4组片段的后三个片段与轮密钥进行异或处理,其处理结果进入T函数进行转换,转化的结果再与第一个片段进行异或处理生成新的一个片段。进行32轮的变换处理以后,取最后四组片段逆向拼接生成密文。 ![img](./buzhou02.png) 加密过程与轮密钥生成的过程有些类似,轮密钥的生成过程是与一个常量FK进行异或,加密则与对应的轮密钥进行异或 #### 解密 SM4算法加/解密算法的结构相同,只是使用轮密钥顺序相反,其中解密轮密钥是加密轮密钥的逆序,即可理解为使用rk31,rk30,……,rk0,即可达到解密的效果