1.下载国密包
npm i sm-crypto
2.获取后端的公钥注sm-crypto使用BC库加解密前端密钥与后端密钥是两队,非常规的base64密钥
前端公钥需要在前面加04占位否则无法解密
// 前端公钥
const publicKey ='0453bac6d2499e427529b3fcd213c33fed87a596d27c52334d457c222c729727925bae7bd7937b2dee449303faf69f128ea7530994d7a9e1272e14e6efef5437ca';
// 前端私钥
const privateKey ='009c2d9397afd38f5fe46d85611f55ebb8118c3b148d51fe8cc26a509215d49a33'
// 后端公钥
const publicKey ='MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEq+OqrQd71xbWD50ks7zfikU7ec64O8fp0d6yuEbadmURoZl4P07I1aEm4bjGvxmP6XP65tqNJWgTDomLhvrpUQ==';
// 后端私钥
const privateKey ='MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgn1ABWedtUoujWXCCwMfKnCXLgj1riMWf/S2SB6xodZKgCgYIKoEcz1UBgi2hRANCAASr46qtB3vXFtYPnSSzvN+KRTt5zrg7x+nR3rK4Rtp2ZRGhmXg/TsjVoSbhuMa/GY/pc/rm2o0laBMOiYuG+ulR'
java 密钥生成方式
SM2 sm2 = SmUtil.sm2();
String privateKey = sm2.getPrivateKeyBase64(); // 私钥
String publicKey = sm2.getPublicKeyBase64(); // 公钥
String privateQKey = HexUtil.encodeHexStr(BCUtil.encodeECPrivateKey(sm2.getPrivateKey())); // 前端使用的私钥
String publicQKey = HexUtil.encodeHexStr(((BCECPublicKey) sm2.getPublicKey()).getQ().getEncoded(false)); // 前端使用的公钥
3.前端使用公钥进行加密文章来源:https://www.toymoban.com/news/detail-503715.html
- 生成的加密串加04方便后端解密
/**
* 国密sm2加密
* @param str 需要加密的文本
* @param publicKey 公钥
* @param cipherMode sm2的加解密时有两种方式即0——C1C2C3、1——C1C3C2,前后端需要统一
* @returns 加密后的数据
*/
export function sm2Encryption(str: string, publicKey: string = Global.commonPubilcKey,cipherMode =1) {
const sm2 = smCrypto.sm2;
// 加密
return sm2.doEncrypt(str, publicKey,cipherMode );
}
4.前端使用私钥解密文章来源地址https://www.toymoban.com/news/detail-503715.html
/**
* TODO: 国密sm2解密
* @param privateKey 前端私钥
* @param cipherMode sm2的加解密时有两种方式即0——C1C2C3、1——C1C3C2,前后端需要统一
* @returns 解密后的数据
*/
export function sm2DoDecrypt(
data: string,
privateKey: string = Global.privateKey,
cipherMode =1
) {
const sm2 = smCrypto.sm2;
// 解密
return sm2.doDecrypt(data, privateKey, cipherMode );
}
到了这里,关于前端sm2国密加密解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!