国密SM2前端加密,Java后台解密问题
背景:要实现请求参数加密的功能,使用的是国密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后台解密问题相关推荐
- 数据加密-国密SM2对数据进行加解密
1 什么是SM2 RSA算法的危机在于其存在亚指数算法,对ECC算法而言一般没有亚指数攻击算法. SM2椭圆曲线公钥密码算法:我国自主知识产权的商用密码算法,是ECC(Elliptic Curve C ...
- 国密SM2电子签章JAVA实现
本文默认所需的国密SM2证书已生成完成.基于BouncyCastle JAR包+itextpdf,利用itext提供的2个签名接口:ExternalDigest 及 ExternalSignature ...
- 国密sm2 js加密后台解密,sm3 js、后台加密,sm4 后台加密
公司最近进行安全问题修改,所以要用国密系列的sm2,sm3,sm4,这些加密都用在登录模块,因此作为菜鸟的我,从网上找了一堆资料,整理修改后形成符合项目的加密,需要的可以自己去查看相关代码和jar包: ...
- 前端使用国密sm2和sm4进行加解密
国密SM加密 国密SM:国密算法,即国家商用密码算法.是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准.如SM系列密码,SM代表商密,即商业密码,是指用于商业的 ...
- 详解国密SM2的加密和解密
在上一篇文章<解读国密非对称加密算法SM2>介绍了国密非对称算法SM2,在文章中说到,如果现有的网络库中已经实现ECC算法,只需加入SM2命名曲线的参数即可.这对于ECDHE密钥协商和EC ...
- RSA 前段加密 java 后台解密 已调试通过
本人整理网上的.好多网上的调不通.在这里把调试好的贴出来. 1. 异步获取公钥(后台获取):你也可以将公钥串写在页面上: var publicKey = null; $.ajax({ url: c ...
- js插件jsencrypt实现rsa前端加密php后台解密
前端页面代码 传递到php后台的是公钥加密的数据 <!DOCTYPE html> <html lang="en"> <head><meta ...
- 国密SM2算法的java和nodejs实现
转至 http://mp.weixin.qq.com/s/nboZAvg1qYiJIEun6yF2aQ 国密即国家密码局认定的国产密码算法,即商用密码.包括对称加密(SM1) ,非对称加密(SM2) ...
- rsa实现js前台加密java后台解密
前段时间咱老大吩咐我写一个rsa前台加密到后台用java解密.(说实话这之前我还真没用过) 不过没办法啊,这是任务,于是研究了一下.圆满完成任务了,下面共享下实现思路: 准备工作:其实鄙人也没那么强啦 ...
最新文章
- Guava Cache缓存的移除与读取
- Android Studio第十九期 - Glin架构
- acwing算法题--分组背包问题
- html5 video全屏api,H5+ app使用多媒体(video、webview)API视频展示以及全屏
- Jackson 注解 -- 指定输出顺序
- uvalive5798(树状数组)
- 关于SAP CRM One Order状态(Status)和Status Profile的处理逻辑
- php 如何生成exe文件怎么打开,如何把PHP转成EXE文件
- Nagios学习实践系列
- 键盘显示影响布局的解决方法
- python工资这么高为什么不学-小白入行年薪21万,为什么Python岗位薪资越来越高?...
- 【pytorch】梯度爆炸/消失解决办法
- 可编辑ppt地图分布图怎么做?
- 亲自动手写一个深度学习框架
- Kubernetes如何被应用在华为
- QT动态翻译中英文语言
- win8系统保护服务器,Win8整合SmartScreen升级功能保护系统安全
- 雷电2接口_了解这些常用接口一定会有用的
- C语言中逗号运算符和逗号表达式!
- 使用RecyclerView实现瀑布流,仿照小红书,解决顶部留白、卡顿等问题