0


国密SM2前端加密解密示例

一、 安装sm2依赖

  1. npm install --save sm-crypto

二、编写代码

1、data中绑定数据

要改变的数据phone和过程数据copyphone,公钥publicKey和私钥privateKey

具体生成测试公钥私钥可参照SM2加解密

C1为65字节第1字节为压缩标识,这里固定为0x04

publicKey是'04'+公钥X+公钥Y

privateKey直接复制粘贴

实际运行情况下可参考RuoYi前后端分离(登录密码加密)更改为SM2加密,密钥由后端传输

  1. export default {
  2. data() {
  3. return {
  4. copyphone: '',
  5. phone: '',
  6. publicKey: "",
  7. privateKey: "",
  8. }
  9. },

2、公钥加密

  1. getphone() {
  2. const sm2 = require('sm-crypto').sm2;
  3. var publicKey = this.publicKey;//加密使用
  4. var encrText = this.phone;//例如var enxrText = this.phone;
  5. const cipherMode = 1;
  6. let encryptData = sm2.doEncrypt(encrText, publicKey, cipherMode) // 加密结果
  7. this.copyphone = encryptData;
  8. return '04' + encryptData;//04可不要具体看后端要求
  9. },

3、私钥解密

  1. returnphone() {
  2. const sm2 = require('sm-crypto').sm2;
  3. var privateKey = this.privateKey;
  4. var encrText = this.copyphone;
  5. const cipherMode = 1
  6. let decryptData = sm2.doDecrypt(encrText, privateKey, cipherMode) // 解密结果
  7. this.copyphone = decryptData;//赋值方便处理
  8. return decryptData;
  9. }

4、按钮绑定一下,数据可见一下

  1. <template>
  2. <div>
  3. <navigation_bar></navigation_bar>
  4. <el-tag>原始数据</el-tag><el-input v-model="phone" placeholder="请输入待转换数据">
  5. </el-input>
  6. <el-tag>过程数据</el-tag><el-input v-model="copyphone"></el-input>
  7. <el-tag>公钥</el-tag><el-input v-model="publicKey"></el-input>
  8. <el-tag>私钥</el-tag><el-input v-model="privateKey"></el-input>
  9. <el-button type="primary" @click="getphone()">sm2加密按钮</el-button>
  10. <el-button type="primary" @click="returnphone()">sm2解密按钮</el-button>
  11. </div>
  12. </template>

三、完整代码

请放在Vue项目下运行

  1. <template>
  2. <div>
  3. <el-tag>原始数据</el-tag><el-input v-model="phone" placeholder="请输入待转换数据"></el-input>
  4. <el-tag>过程数据</el-tag><el-input v-model="copyphone"></el-input>
  5. <el-tag>公钥</el-tag><el-input v-model="publicKey"></el-input>
  6. <el-tag>私钥</el-tag><el-input v-model="privateKey"></el-input>
  7. <el-button type="primary" @click="getphone()">sm2加密按钮</el-button>
  8. <el-button type="primary" @click="returnphone()">sm2解密按钮</el-button>
  9. </div>
  10. </template>
  11. <script>
  12. // npm install --save sm-crypto
  13. // 第一步就是安装依赖
  14. //解密使用 var privateKey = "私钥";
  15. //加密使用 var publicKey = "公钥";
  16. export default {
  17. data() {
  18. return {
  19. copyphone: '',
  20. phone: '',
  21. publicKey: "自己生成好的填进来",
  22. privateKey: "自己生成好的填进来",
  23. }
  24. },
  25. methods: {
  26. getphone() {
  27. const sm2 = require('sm-crypto').sm2;
  28. //C1为65字节第1字节为压缩标识,这里固定为0x04
  29. //publicKey是'04'+公钥X+公钥Y
  30. //密钥对生成https://i.goto327.top/CryptTools/SM2.aspx
  31. var publicKey = this.publicKey;//加密使用
  32. var encrText = this.phone;//例如var enxrText = this.phone;
  33. const cipherMode = 1;
  34. let encryptData = sm2.doEncrypt(encrText, publicKey, cipherMode) // 加密结果
  35. this.copyphone = encryptData;
  36. return '04' + encryptData;//04可不要具体看后端要求
  37. },
  38. returnphone() {
  39. const sm2 = require('sm-crypto').sm2;
  40. var privateKey = this.privateKey;
  41. var encrText = this.copyphone;
  42. const cipherMode = 1
  43. let decryptData = sm2.doDecrypt(encrText, privateKey, cipherMode) // 解密结果
  44. this.copyphone = decryptData;//赋值方便处理
  45. return decryptData;
  46. }
  47. }
  48. }
  49. </script>
标签: 前端 密码学 算法

本文转载自: https://blog.csdn.net/m0_55464684/article/details/132275142
版权归原作者 Huuuuuuuwow 所有, 如有侵权,请联系我们删除。

“国密SM2前端加密解密示例”的评论:

还没有评论