国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue+Springboot前后端完整使用國密算法SM2雙公私鑰對數(shù)據(jù)加密傳輸交互完整解決方案

這篇具有很好參考價(jià)值的文章主要介紹了Vue+Springboot前后端完整使用國密算法SM2雙公私鑰對數(shù)據(jù)加密傳輸交互完整解決方案。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Vue+Springboot 前后端完整使?國密算法SM2雙公私鑰對數(shù)據(jù)加密傳輸交互完整解決?案項(xiàng)?,特別是企事業(yè)單位的項(xiàng)?,第三方測試公司做安全測試時(shí),常常要求使用國密算法,因涉及服務(wù)端和客戶端的交互,傳遞關(guān)鍵數(shù)據(jù)時(shí)要求使用SM2非對稱加密。

引入相關(guān)依賴

這里我使用的是jdk1.8 的maven項(xiàng)目,需要在pom.xml里引入以下依賴:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.22</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.70</version>
</dependency>
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.14</version>
</dependency>

?可復(fù)用代碼

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.BCUtil;
import cn.hutool.crypto.asymmetric.SM2;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.math.ec.ECPoint;

import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;

@Slf4j
public class SM2Utils {

    static final BouncyCastleProvider bc = new BouncyCastleProvider();

    public static Map<String,Object> generateKey(){
        Map<String,Object> map = new HashMap<>();
        SM2 sm2=new SM2();

        BCECPrivateKey privateKey = (BCECPrivateKey) (sm2.getPrivateKey());
        BigInteger d = privateKey.getD();

        BCECPublicKey publicKey = (BCECPublicKey) sm2.getPublicKey();
        ECPoint q = publicKey.getQ();

        String hutoolPrivateKeyHex = HexUtil.encodeHexStr(BCUtil.encodeECPrivateKey(privateKey));
        String hutoolPublicKeyHex = HexUtil.encodeHexStr(q.getEncoded(false));

        map.put("publicKeyHex",hutoolPublicKeyHex);
        map.put("privateKeyHex",hutoolPrivateKeyHex);
        return map;
    }
}

服務(wù)端在登錄校驗(yàn)成功后生成服務(wù)端公私鑰對,并把改公私鑰對存放到session中,便于下次會(huì)話提取,同時(shí)將公鑰字符串返回給客戶端:?

//生成服務(wù)器公私鑰對,并將服務(wù)器公私鑰放入session
Map<String,Object> mapKey = SM2Utils.generateKey();
session.setAttribute("publicKeyHex",mapKey.get("publicKeyHex").toString());
session.setAttribute("privateKeyHex",mapKey.get("privateKeyHex").toString());  
//公鑰和正常消息一起返回給客戶端
map.put("publicKeyHex", mapKey.get("publicKeyHex").toString());

客戶端收到服務(wù)端給出的公鑰后,存入localStorage,并生成客戶端公私鑰對,存入localStorage,并用接收到的服務(wù)端公鑰加密客戶端公私鑰對,將加密后的密文發(fā)給服務(wù)端

npm install --save sm-crypto

const sm2 = require('sm-crypto').sm2
//生成客戶端公私鑰
const { publicKey, privateKey } = sm2.generateKeyPairHex()
window.localStorage.setItem("publicKey", publicKey)
window.localStorage.setItem("privateKey", privateKey)

//獲取服務(wù)器端公鑰
let serverPublicKey = res.spk
window.localStorage.setItem("serverPublicKey", serverPublicKey)

//加密客戶端公私鑰

encryptpublickeyClient = sm2.doEncrypt(publicKey, serverPublicKey,cipherMode);
encryptpublickeyClient = '04' + encryptpublickeyClient;
encryptprivatekeyClient = sm2.doEncrypt(privateKey, serverPublicKey,cipherMode);
encryptprivatekeyClient = '04' + encryptprivatekeyClient;

?服務(wù)端在二次接收客戶端請求時(shí),從參數(shù)中獲取加密后的客戶端公私鑰對密文,使用服務(wù)端秘鑰解密后,將客戶端公私鑰對存入會(huì)話,并在服務(wù)器生成隨機(jī)數(shù),用客戶端公鑰加密后返回?cái)?shù)據(jù)給前端:

String publicKeyHex = session.getAttribute("publicKeyHex").toString();
String privateKeyHex = session.getAttribute("privateKeyHex").toString();
//privateKey 為上述生成的私鑰 publicKey為生成的公鑰,注意 此處不是Q值
SM2 sm2 = SmUtil.sm2(privateKeyHex, publicKeyHex);
//body為加密后的數(shù)據(jù)(注意:此處加密數(shù)據(jù)可能缺少04開頭,解密會(huì)失敗,需要手動(dòng)在body前拼上04,body="04"+body)
String clientPublicKeyStr = sm2.decryptStr(userDTO.getClientPublicKey(), KeyType.PrivateKey);
String clientPrivateKeyStr = sm2.decryptStr(userDTO.getClientPrivateKey(), KeyType.PrivateKey);
SM2 sm2Client = SmUtil.sm2(clientPrivateKeyStr, clientPublicKeyStr);
String uid = UUID.randomUUID().toString().replaceAll("-","");
String uidEncode = sm2Client.encryptHex(uid,KeyType.PublicKey);
map.put("uid", uidEncode);

客戶端接收到服務(wù)端的uid密文后,使用客戶端私鑰解密,并存入localStorage中

let uidEcrpyptCode = res.uid;
let headerStr = uidEcrpyptCode.substring(0, 2)? ? ? ? ? ? ? ? ?

if(headerStr == '04'){
? ? ? ?uidEcrpyptCode = uidEcrpyptCode.substring(2, uidEcrpyptCode.length)
?}

//解密uid
let uidStr = sm2.doDecrypt(uidEcrpyptCode, '00'+privateKey)
window.localStorage.setItem("uid", uidStr);

?文章來源地址http://www.zghlxwxcb.cn/news/detail-817899.html

到了這里,關(guān)于Vue+Springboot前后端完整使用國密算法SM2雙公私鑰對數(shù)據(jù)加密傳輸交互完整解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 國密算法SM2、SM3的使用

    1. SM2是非對稱加密算法 ????????它是基于橢圓曲線密碼的公鑰密碼算法標(biāo)準(zhǔn),其秘鑰長度256bit,包含數(shù)字簽名、密鑰交換和公鑰加密,用于替換RSA/DH/ECDSA/ECDH等國際算法??梢詽M足電子認(rèn)證服務(wù)系統(tǒng)等應(yīng)用需求,由國家密碼管理局于2010年12月17號發(fā)布。 2.SM3是一種密碼雜湊

    2024年02月06日
    瀏覽(20)
  • react+vue 前端國密算法sm2、sm3 、sm4的js ts實(shí)現(xiàn)

    1. 簡單介紹下SM2 和 SM3 SM2 算法:是一種公鑰加密算法,它的密鑰長度為 256 位,安全性較高。可用于數(shù)字簽名、密鑰協(xié)商等場景。 SM3 算法:是一種對稱加密算法,用于消息摘要和數(shù)字簽名等場景。它的密鑰長度為 256 位,安全性較高。SM3 算法與 SM2 算法相互配合,提高了整體

    2024年01月19日
    瀏覽(33)
  • vue普通加密以及國密SM2、SM3、sm4的使用

    sm-crypto:https://www.npmjs.com/package/sm-crypto 1. SM2是非對稱加密算法 它是基于橢圓曲線密碼的公鑰密碼算法標(biāo)準(zhǔn),其秘鑰長度256bit,包含數(shù)字簽名、密鑰交換和公鑰加密,用于替換RSA/DH/ECDSA/ECDH等國際算法。可以滿足電子認(rèn)證服務(wù)系統(tǒng)等應(yīng)用需求,由國家密碼管理局于2010年12月17號

    2023年04月09日
    瀏覽(24)
  • 國密SM2: 加解密實(shí)現(xiàn) java代碼完整示例

    國密SM2: 加解密實(shí)現(xiàn) java代碼完整示例

    目錄 ?具體Java代碼SM2算法加解密實(shí)現(xiàn)Demo: pom依賴引入 :? 國家密碼管理局于2010年12月17日發(fā)布了SM2算法,并要求現(xiàn)有的基于RSA算法的電子認(rèn)證系統(tǒng)、密鑰管理系統(tǒng)、應(yīng)用系統(tǒng)進(jìn)升級改造,使用支持國密SM2算法的證書。 ?? 基于ECC橢圓曲線算法的SM2算法,則普遍采用256位密鑰

    2024年02月13日
    瀏覽(18)
  • 國密算法:利用python進(jìn)行sm2非對稱算法的實(shí)現(xiàn),國密算法庫gmssl的使用

    我們繼續(xù)來進(jìn)行國密算法的演示。 本篇演示sm2非對稱算法的實(shí)現(xiàn),國密算法庫gmssl的使用。 sm2: 即橢圓曲線公鑰密碼算法,是由國家密碼管理局發(fā)布的; 非對稱加密算法,即有一對不一樣的密鑰:公鑰和私鑰,公鑰用來加密,私鑰用來解密; 公鑰和私鑰:公鑰,可以公開。

    2024年02月06日
    瀏覽(27)
  • 使用 Java Bouncy Castle實(shí)現(xiàn)國密算法SM4、SM3以及SM2的加密

    使用 Java Bouncy Castle實(shí)現(xiàn)國密算法SM4、SM3以及SM2的加密

    國密算法的實(shí)現(xiàn)借助了Java庫函數(shù) Bouncy Castle,加密庫安裝使用教程請參考鏈接 SM4,又稱為商密算法,是一種分組密碼算法,于2012年由中國密碼技術(shù)研究中心(中國密碼學(xué)會(huì)成員)發(fā)布,目前已成為我國國家密碼算法,并在多個(gè)領(lǐng)域得到了廣泛的應(yīng)用。SM4算法采用了32輪迭代結(jié)

    2024年02月16日
    瀏覽(34)
  • 國密SM2/SM3算法

    分類 1、SM1是一種分組加密算法 對稱加密算法中的分組加密算法,其分組長度、秘鑰長度都是128bit,算法安全保密強(qiáng)度跟 AES 相當(dāng),但是算法不公開,僅以IP核的形式存在于芯片中,需要通過加密芯片的接口進(jìn)行調(diào)用。 采用該算法已經(jīng)研制了系列芯片、智能IC卡、智能密碼鑰匙

    2024年02月05日
    瀏覽(20)
  • 國密算法-SM2

    ????????國密算法是國家密碼局制定標(biāo)準(zhǔn)的一系列算法,包括SM1、SM2、SM3、SM4等。其中,SM1是采用硬件實(shí)現(xiàn)的,不予討論;SM2是非對稱加密算法;SM3是摘要算法;SM4是對稱加密算法。本篇貼出SM2?Java版本實(shí)現(xiàn)生成公私鑰及加解密、簽名驗(yàn)簽代碼,供大家一起討論學(xué)習(xí),所有

    2024年02月11日
    瀏覽(21)
  • SM2國密算法加解密

    接口安全設(shè)計(jì)原則的一個(gè)點(diǎn)就是數(shù)據(jù)不能明文傳輸,除了https這個(gè)必須的請求外,接口數(shù)據(jù)加密也是一個(gè)重要的方式,下面介紹一下SM2國密算法加解密的使用方式。 這里我就針對目前前后端分離架構(gòu)的方式來簡單介紹一下如何正確使用 SM2 算法對數(shù)據(jù)進(jìn)行加解密,介紹分為后

    2024年02月11日
    瀏覽(45)
  • Delphi SM2/SM4國密算法

    Delphi SM2/SM4國密算法

    ? ? 最近忙個(gè)醫(yī)保平臺的項(xiàng)目,涉及SM2/SM4的簽名,驗(yàn)簽,加密,解密的業(yè)務(wù)操作過程。畢竟現(xiàn)在用Delpih的人不是很多,懂這方面的技術(shù)的人也更少,能涉及密碼算法的少之更少,網(wǎng)上也能搜到一些開源的代碼,也由于使用的人少,未加通過業(yè)務(wù)系統(tǒng)來驗(yàn)證,所以存在不少Bu

    2024年02月11日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包