JWT令牌生成採用非對稱加密演算法
JWT令牌生成採用非對稱加密演算法
1、生成金鑰證照 下邊命令生成金鑰證照,採用RSA 演算法每個證照包含公鑰和私鑰
keytool -genkeypair -alias changgou -keyalg RSA -keypass changgou -keystore changgou.jks -storepass changgou
Keytool 是一個java提供的證照管理工具
-alias:金鑰的別名
-keyalg:使用的hash演算法
-keypass:金鑰的訪問密碼
-keystore:金鑰庫檔名,changgou.jks儲存了生成的證照
-storepass:金鑰庫的訪問密碼
查詢證照資訊:
keytool -list -keystore changgou.jks
2、匯出公鑰
openssl是一個加解密工具包,這裡使用openssl來匯出公鑰資訊。
安裝 openssl:http://slproweb.com/products/Win32OpenSSL.html
安裝資料目錄下的Win64OpenSSL-1_1_1b.exe
配置openssl的path環境變數,
cmd進入changgou.jks檔案所在目錄執行如下命令:
keytool -list -rfc --keystore changgou.jks | openssl x509 -inform pem -pubkey
1558222853425
下面段內容是公鑰
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFsEiaLvij9C1Mz+oyAm
t47whAaRkRu/8kePM+X8760UGU0RMwGti6Z9y3LQ0RvK6I0brXmbGB/RsN38PVnh
cP8ZfxGUH26kX0RK+tlrxcrG+HkPYOH4XPAL8Q1lu1n9x3tLcIPxq8ZZtuIyKYEm
oLKyMsvTviG5flTpDprT25unWgE4md1kthRWXOnfWHATVY7Y/r4obiOL1mS5bEa/
iNKotQNnvIAKtjBM4RlIDWMa6dmz+lHtLtqDD2LF1qwoiSIHI75LQZ/CNYaHCfZS
xtOydpNKq8eb1/PGiLNolD4La2zf0/1dlcr5mkesV570NxRmU1tFm8Zd3MZlZmyv
9QIDAQAB
-----END PUBLIC KEY-----
將上邊的公鑰拷貝到文字public.key檔案中,合併為一行,可以將它放到需要實現授權認證的工程中。
3.3.2 認證服務中建立測試類
public class CreateJwtTest {
/***
* 建立令牌測試
*/
@Test
public void testCreateToken(){
//證照檔案路徑
String key_location=“changgou.jks”;
//祕鑰庫密碼
String key_password=“changgou”;
//祕鑰密碼
String keypwd = “changgou”;
//祕鑰別名
String alias = “changgou”;
//訪問證照路徑
ClassPathResource resource = new ClassPathResource(key_location);
//建立祕鑰工廠
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(resource,key_password.toCharArray());
//讀取祕鑰對(公鑰、私鑰)
KeyPair keyPair = keyStoreKeyFactory.getKeyPair(alias,keypwd.toCharArray());
//獲取私鑰
RSAPrivateKey rsaPrivate = (RSAPrivateKey) keyPair.getPrivate();
//定義Payload
Map<String, Object> tokenMap = new HashMap<>();
tokenMap.put(“id”, “1”);
tokenMap.put(“name”, “itheima”);
tokenMap.put(“roles”, “ROLE_VIP,ROLE_USER”);
//生成Jwt令牌
Jwt jwt = JwtHelper.encode(JSON.toJSONString(tokenMap), new RsaSigner(rsaPrivate));
//取出令牌
String encoded = jwt.getEncoded();
System.out.println(encoded);
}
}
3.4 基於公鑰解析jwt令牌
上面建立令牌後,我們可以對JWT令牌進行解析,這裡解析需要用到公鑰,我們可以將之前生成的公鑰public.key拷貝出來用字串變數token儲存,然後通過公鑰解密。
在changgou-user-oauth建立測試類com.changgou.token.ParseJwtTest實現解析校驗令牌資料,程式碼如下:
public class ParseJwtTest {
/***
* 校驗令牌
*/
@Test
public void testParseToken(){
//令牌
String token = “eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6IlJPTEVfVklQLFJPTEVfVVNFUiIsIm5hbWUiOiJpdGhlaW1hIiwiaWQiOiIxIn0.IR9Qu9ZqYZ2gU2qgAziyT38UhEeL4Oi69ko-dzC_P9-Vjz40hwZDqxl8wZ-W2WAw1eWGIHV1EYDjg0-eilogJZ5UikyWw1bewXCpvlM-ZRtYQQqHFTlfDiVcFetyTayaskwa-x_BVS4pTWAskiaIKbKR4KcME2E5o1rEek-3YPkqAiZ6WP1UOmpaCJDaaFSdninqG0gzSCuGvLuG40x0Ngpfk7mPOecsIi5cbJElpdYUsCr9oXc53ROyfvYpHjzV7c2D5eIZu3leUPXRvvVAPJFEcSBiisxUSEeiGpmuQhaFZd1g-yJ1WQrixFvehMeLX2XU6W1nlL5ARTpQf_Jjiw”;
//公鑰
String publickey = “-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFsEiaLvij9C1Mz+oyAmt47whAaRkRu/8kePM+X8760UGU0RMwGti6Z9y3LQ0RvK6I0brXmbGB/RsN38PVnhcP8ZfxGUH26kX0RK+tlrxcrG+HkPYOH4XPAL8Q1lu1n9x3tLcIPxq8ZZtuIyKYEmoLKyMsvTviG5flTpDprT25unWgE4md1kthRWXOnfWHATVY7Y/r4obiOL1mS5bEa/iNKotQNnvIAKtjBM4RlIDWMa6dmz+lHtLtqDD2LF1qwoiSIHI75LQZ/CNYaHCfZSxtOydpNKq8eb1/PGiLNolD4La2zf0/1dlcr5mkesV570NxRmU1tFm8Zd3MZlZmyv9QIDAQAB-----END PUBLIC KEY-----”;
//校驗Jwt
Jwt jwt = JwtHelper.decodeAndVerify(token, new RsaVerifier(publickey));
//獲取Jwt原始內容
String claims = jwt.getClaims();
System.out.println(claims);
//jwt令牌
String encoded = jwt.getEncoded();
System.out.println(encoded);
}
}
相關文章
- 非對稱加密與 jwt加密JWT
- 應用加密1;非對稱加密演算法揭祕加密演算法
- 對稱加密與非對稱加密加密
- 非對稱加密演算法的思考加密演算法
- 資料加密(對稱加密和非對稱加密)加密
- 非對稱加密演算法-RSA演算法加密演算法
- 對稱加密、非對稱加密、RSA(總結)加密
- RSA非對稱加密演算法中的金鑰對生成與傳輸加密演算法
- 編碼與加密(對稱加密與非對稱加密)加密
- RSA非對稱加密演算法淺析加密演算法
- 對稱加密和非對稱加密(一)初步理解加密
- https中的對稱加密和非對稱加密HTTP加密
- 加密原理詳解:對稱式加密VS非對稱式加密加密
- 聊聊對稱/非對稱加密在HTTPS中的應用加密HTTP
- 非對稱加密體系加密
- RSA 非對稱加密&解密加密解密
- 非對稱加密與OpenSSL加密
- ssh與非對稱加密加密
- Android 安全加密:非對稱加密Android加密
- Android安全加密:非對稱加密Android加密
- 第四篇:非對稱加密及RSA加密演算法加密演算法
- Java安全之對稱加密、非對稱加密、數字簽名Java加密
- Java加密技術(七)——非對稱加密演算法最高階ECCJava加密演算法
- 非對稱加密--RSA原理淺析加密
- JWT 令牌JWT
- 非對稱加密技術- RSA演算法數學原理分析加密演算法
- 對稱加密演算法----DES加密演算法加密演算法
- golang 中,非對稱加密的實現Golang加密
- 非對稱加密技術:共享祕鑰加密
- 理解區塊鏈的非對稱加密區塊鏈加密
- 非對稱加密和數字證書加密
- 非對稱加密和證書總結加密
- 非對稱加密演算法RSA中的公鑰和私鑰加密演算法
- Linux系統中對稱加密和非對稱加密區別是什麼?Linux加密
- Linux SSH是什麼?對稱加密和非對稱加密有何區別?Linux加密
- 國密2 (sm2)非對稱加密解密工具--支援生成公鑰私鑰對及加密解密加密解密
- 安全令牌JWTJWT
- 加密解密技術—對稱演算法加密加密解密演算法