在Java安全體系中,簽名屬於JAAS模塊,加解密屬於JCE模塊。java
keytool是JDK自帶的一個密鑰庫管理工具。這裏只用到了keytool的部分功能,包括生成密鑰對,導出公鑰等。keytool生成的公鑰/私鑰對存放到一個到了一個文件中,這個文件有密碼保護,通稱爲keystore。算法
1安全 |
|
生成別名爲signLegal的密鑰對,存放在密鑰庫examplestanstore2中,證書的有效期是1800天(默認是90天)。
輸入一系列的參數。輸入的參數遵循了LDAP的風格和標準。能夠想象,生成的密鑰對能夠當作LDAP的一個條目。
命令執行成功後會在當前目錄下建立一個叫examplestanstore2
的文件。相對另外一篇博文,增長了一個keyalg參數。由於keytool默認算法是DSA,而DSA只能用於簽名。RSA既能用於簽名,也能用於加密。而本文是研究加密問題,只能用RSA算法。架構
1app |
|
列出了examplestanstore2密鑰庫的中全部密鑰對。-v
參數表示詳細信息,詳細信息中有證書的失效時間。ide
1工具 |
|
導出的公鑰存放在當前目錄的StanSmith.crt文件中。講「簽名」的那篇博文沒有加-rfc
參數,導出是個二進制文件(CER格式)。加上-rfc後,導出的是文本文件(PEM)格式。在下面的測試中,若是使用CER格式,會報錯 ` No installed provider supports this key: sun.security.provider.DSAPublicKeyImpl`。
在Java程序中,首先從密鑰庫取出私鑰和公鑰,而後對測試字符串進行加密。二進制的密文轉換成字符串輸出到屏幕,而後解密成明文再輸出到屏幕。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
編譯,並運行
1 2 3 4 |
|
本文展現的算法是一種非對稱算法,計算較慢。在SSL中,非對稱算法用於客戶端和服務器之間交換對稱加密的一次性密鑰。客戶端將一個隨機數用服務器的公鑰加密發給服務器,若是服務器持有私鑰,就能解開密文得到隨機數(這個隨機數就是對稱算法的密鑰)。有了對稱算法密鑰,雙方就能夠用對稱加密進行安全通訊了。
歡迎學Java和大數據的朋友們加入java架構交流: 855835163 羣內提供免費的架構資料還有:Java工程化、高性能及分佈式、高性能、深刻淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的免費直播講解 能夠進來一塊兒學習交流哦