背景:要实现请求参数加密的功能,使用的是国密SM2算法,前端向后台发送请求获取公钥,将请求加密发送到后台,后台用对应的私钥进行解密

问题:前端进行加密的请求,后台无法进行解析

解决方案:(此处所用的类都为Hutool里的工具类)

  • 当前的前端的SM2加密js库都是使用SM2公钥的q值转成16进制进行加密,所以在后台给前端发送公钥时,需要提取公钥的q值并且转成16进制
        KeyPair pair = SecureUtil.generateKeyPair("SM2");PrivateKey aPrivate = pair.getPrivate();byte[] privateKey = aPrivate.getEncoded();//解密时需要用到PublicKey aPublic = pair.getPublic();byte[] publicKey = aPublic.getEncoded();//解密时需要用到//将q值提取出来并且转成16进制String q = HexUtil.encodeHexStr(((BCECPublicKey)aPublic).getQ().getEncoded(false));

此处q就为前端加密是所用的公钥

  • 附加(2021/08/23):忘记把前端加密给整上来了(前端加密用的是sm-crypto的库,npm下载以后拉过来用)
npm install --save sm-crypto
const sm2 = require('sm-crypto').sm2;
const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1//公钥,也就是后台传到前端的q值
var publicKey = 'asdsadasdaddsad';//params 参数  a就为传到后台加密后的参数 注意:传到后台的话 需要再加密后的字符串前面加上04 要不然解析不出来,或者后台解密之前加上04
var a=sm2.doEncrypt(JSON.stringify(params), publicKey, cipherMode)
  • 前端使用公钥将请求进行加密,后台进行解密
                //privateKey 为上述生成的私钥 publicKey为生成的公钥,注意 此处不是Q值SM2 sm2 = SmUtil.sm2(privateKey, publicKey);//body为加密后的数据(注意:此处加密数据可能缺少04开头,解密会失败,需要手动在body前拼上04,body="04"+body)String requestBody = sm2.decryptStr(body, KeyType.PrivateKey);

到此 国密SM2前端加密,后台解密完成

国密SM2前端加密,Java后台解密问题相关推荐

  1. 数据加密-国密SM2对数据进行加解密

    1 什么是SM2 RSA算法的危机在于其存在亚指数算法,对ECC算法而言一般没有亚指数攻击算法. SM2椭圆曲线公钥密码算法:我国自主知识产权的商用密码算法,是ECC(Elliptic Curve C ...

  2. 国密SM2电子签章JAVA实现

    本文默认所需的国密SM2证书已生成完成.基于BouncyCastle JAR包+itextpdf,利用itext提供的2个签名接口:ExternalDigest 及 ExternalSignature ...

  3. 国密sm2 js加密后台解密,sm3 js、后台加密,sm4 后台加密

    公司最近进行安全问题修改,所以要用国密系列的sm2,sm3,sm4,这些加密都用在登录模块,因此作为菜鸟的我,从网上找了一堆资料,整理修改后形成符合项目的加密,需要的可以自己去查看相关代码和jar包: ...

  4. 前端使用国密sm2和sm4进行加解密

    国密SM加密 国密SM:国密算法,即国家商用密码算法.是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准.如SM系列密码,SM代表商密,即商业密码,是指用于商业的 ...

  5. 详解国密SM2的加密和解密

    在上一篇文章<解读国密非对称加密算法SM2>介绍了国密非对称算法SM2,在文章中说到,如果现有的网络库中已经实现ECC算法,只需加入SM2命名曲线的参数即可.这对于ECDHE密钥协商和EC ...

  6. RSA 前段加密 java 后台解密 已调试通过

    本人整理网上的.好多网上的调不通.在这里把调试好的贴出来. 1.   异步获取公钥(后台获取):你也可以将公钥串写在页面上: var publicKey = null; $.ajax({ url: c ...

  7. js插件jsencrypt实现rsa前端加密php后台解密

    前端页面代码 传递到php后台的是公钥加密的数据 <!DOCTYPE html> <html lang="en"> <head><meta ...

  8. 国密SM2算法的java和nodejs实现

    转至 http://mp.weixin.qq.com/s/nboZAvg1qYiJIEun6yF2aQ 国密即国家密码局认定的国产密码算法,即商用密码.包括对称加密(SM1) ,非对称加密(SM2) ...

  9. rsa实现js前台加密java后台解密

    前段时间咱老大吩咐我写一个rsa前台加密到后台用java解密.(说实话这之前我还真没用过) 不过没办法啊,这是任务,于是研究了一下.圆满完成任务了,下面共享下实现思路: 准备工作:其实鄙人也没那么强啦 ...

最新文章

  1. Guava Cache缓存的移除与读取
  2. Android Studio第十九期 - Glin架构
  3. acwing算法题--分组背包问题
  4. html5 video全屏api,H5+ app使用多媒体(video、webview)API视频展示以及全屏
  5. Jackson 注解 -- 指定输出顺序
  6. uvalive5798(树状数组)
  7. 关于SAP CRM One Order状态(Status)和Status Profile的处理逻辑
  8. php 如何生成exe文件怎么打开,如何把PHP转成EXE文件
  9. Nagios学习实践系列
  10. 键盘显示影响布局的解决方法
  11. python工资这么高为什么不学-小白入行年薪21万,为什么Python岗位薪资越来越高?...
  12. 【pytorch】梯度爆炸/消失解决办法
  13. 可编辑ppt地图分布图怎么做?
  14. 亲自动手写一个深度学习框架
  15. Kubernetes如何被应用在华为
  16. QT动态翻译中英文语言
  17. win8系统保护服务器,Win8整合SmartScreen升级功能保护系统安全
  18. 雷电2接口_了解这些常用接口一定会有用的
  19. C语言中逗号运算符和逗号表达式!
  20. 使用RecyclerView实现瀑布流,仿照小红书,解决顶部留白、卡顿等问题

热门文章

  1. 移动端前端抓包神器详解(whistle+weinre)
  2. wordpress页面生成二维码
  3. 正点原子imx6ull 4.3寸RGBLCD 800*480 ATK-4384触摸屏驱动芯片GT1511或GT9147问题
  4. xshell服务器命令
  5. nCode:DesignLife案例教程十三
  6. ECALL Switch/Ordinary模式
  7. 实景三维在应急中的专题应用
  8. win10 tomcat闪退问题分析及解决
  9. 云网融合,助力新型数字基础设施建设
  10. JMeter业务实现1:使用SSL Manager实现https双向认证