欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot整合JwtHelper實現(xiàn)非對稱加密

 更新時間:2022年03月31日 12:14:31   作者:Love is beautiful  
本文主要介紹了Springboot整合JwtHelper實現(xiàn)非對稱加密,主要介紹兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、生成公私鑰對

提供兩種方法,一種基于命令行中的Keytool工具生成,一種是基于SpringSecurity中的KeyPairGenerator類生成,現(xiàn)實現(xiàn)第二種方式:

//    加密算法
    private static final String KEY_ALGORITHM = "RSA";
//    公鑰key
    private static final String PUB_KEY="publicKey";
//    私鑰key
    private static final String PRI_KEY="privateKey";
 
    public static Map<String,String> generateKey() throws NoSuchAlgorithmException {
        Map<String,String> keyMap=new HashMap<>();
        KeyPairGenerator instance = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        KeyPair keyPair = instance.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();
        PublicKey publicKey = keyPair.getPublic();
        //Base64 編碼
        byte[] privateKeyEncoded = privateKey.getEncoded();
        String privateKeyStr = Base64.encodeBase64String(privateKeyEncoded);
        byte[] publicKeyEncoded = publicKey.getEncoded();
        String publicKeyStr=Base64.encodeBase64String(publicKeyEncoded);
        keyMap.put(PUB_KEY,publicKeyStr);
        keyMap.put(PRI_KEY,privateKeyStr);
        return keyMap;
    }

二、利用私鑰生產(chǎn)token

 //    加密算法
    private static final String KEY_ALGORITHM = "RSA";
    //    公鑰key
    private static final String PUB_KEY="publicKey";
    //    私鑰key
    private static final String PRI_KEY="privateKey";
//    GenerateKey Key=new GenerateKey();
//    利用私鑰生產(chǎn)token
    public static Map<String,String> generateToken(UserDetails userDetails) throws NoSuchAlgorithmException, InvalidKeySpecException {
        GenerateKey Key=new GenerateKey();
        RSAPrivateKey privateKey = null;
        RSAPublicKey publicKey=null;
        String token=null;
        Map<String, String> map=new HashMap<>();
        Map<String, String> keyMap = Key.generateKey();
        privateKey=getPrivateKey(keyMap.get(PRI_KEY));
        Map<String,String> tokenMap=new HashMap<>();
        tokenMap.put("userName",userDetails.getUsername());
//        使用私鑰加密
        token = JwtHelper.encode(JSON.toJSONString(tokenMap), new RsaSigner(privateKey)).getEncoded();
 
 
        map.put("token",token);
        map.put("publicKey",keyMap.get(PUB_KEY));
        return map;
    }

三、利用公鑰解密token

public static String parseToken(String token,String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
        Jwt jwt=null;
        RSAPublicKey rsaPublicKey;
        rsaPublicKey=getPublicKey(publicKey);
        jwt=JwtHelper.decodeAndVerify(token, new RsaVerifier(rsaPublicKey) );
        String claims= jwt.getClaims();
        return claims;
    }

四、將String類型的公鑰轉(zhuǎn)換成RSAPublicKey對象

    /**
     * 得到公鑰
     *
     * @param publicKey
     *            密鑰字符串(經(jīng)過base64編碼)
     * @throws Exception
     */
    public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {
        // 通過X509編碼的Key指令獲得公鑰對象
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey));
        RSAPublicKey key = (RSAPublicKey) keyFactory.generatePublic(x509KeySpec);
        return key;
    }

五、將String類型的私鑰轉(zhuǎn)換成RSAPrivateKey對象

    /**
     * 得到私鑰pkcs8
     *
     * @param privateKey
     *            密鑰字符串(經(jīng)過base64編碼)
     * @throws Exception
     */
    public static RSAPrivateKey getPrivateKey(String privateKey)
            throws NoSuchAlgorithmException, InvalidKeySpecException {
        // 通過PKCS#8編碼的Key指令獲得私鑰對象
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey));
        RSAPrivateKey key = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8KeySpec);
        return key;
    }

到此這篇關(guān)于Springboot整合JwtHelper實現(xiàn)非對稱加密的文章就介紹到這了,更多相關(guān)Springboot JwtHelper非對稱加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring定時任務(wù)無故停止又不報錯的解決

    Spring定時任務(wù)無故停止又不報錯的解決

    這篇文章主要介紹了Spring定時任務(wù)無故停止又不報錯的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Windows中Tomcat整合到Eclipse的圖文教程

    Windows中Tomcat整合到Eclipse的圖文教程

    下面小編就為大家?guī)硪黄猈indows中Tomcat整合到Eclipse的圖文教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Go Java算法之字符串中第一個唯一字符詳解

    Go Java算法之字符串中第一個唯一字符詳解

    這篇文章主要為大家介紹了Go Java算法之字符串中第一個唯一字符詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java反射機(jī)制根據(jù)屬性名獲取屬性值的操作

    java反射機(jī)制根據(jù)屬性名獲取屬性值的操作

    這篇文章主要介紹了java反射機(jī)制根據(jù)屬性名獲取屬性值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Mybatis配置返回為修改影響條數(shù)方式

    Mybatis配置返回為修改影響條數(shù)方式

    這篇文章主要介紹了Mybatis配置返回為修改影響條數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java Resource路徑整理總結(jié)

    Java Resource路徑整理總結(jié)

    這篇文章主要介紹了 Java Resource路徑整理總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • SpringMVC 通過commons-fileupload實現(xiàn)文件上傳功能

    SpringMVC 通過commons-fileupload實現(xiàn)文件上傳功能

    這篇文章主要介紹了SpringMVC 通過commons-fileupload實現(xiàn)文件上傳,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java內(nèi)存模型之重排序的相關(guān)知識總結(jié)

    Java內(nèi)存模型之重排序的相關(guān)知識總結(jié)

    重排序是指編譯器和處理器為了優(yōu)化性能而對指令序列進(jìn)行重新排序的一種手段,文中詳細(xì)介紹了Java重排序的相關(guān)知識,需要的朋友可以參考下
    2021-06-06
  • WxJava微信公眾號開發(fā)入門實戰(zhàn)

    WxJava微信公眾號開發(fā)入門實戰(zhàn)

    本文主要介紹了WxJava微信公眾號開發(fā)入門實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java異步調(diào)用的4種實現(xiàn)方法

    java異步調(diào)用的4種實現(xiàn)方法

    日常開發(fā)中,會經(jīng)常遇到說,前臺調(diào)服務(wù),本文主要介紹了java異步調(diào)用的4種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論