java加密與解密-相關概念(1)

1,對稱加密模型

​ 對稱密碼體制要求加密和解密使用同一個共享密碼,解密是加密的逆運算,由於通信雙方共享使用的時同一個密碼,這就要求通信的雙方在通信前約定好密鑰,並且需要妥善管理改密鑰,不能泄露,該密鑰稱爲祕密密鑰

在這裏插入圖片描述

2,非對稱加密模型

​ 非對稱加密體制的加密密鑰和解密密鑰時不相同的,分爲兩個密鑰,一個公開,一個保密,公開的密鑰成爲公鑰,保密的密鑰成爲私鑰。非對稱密碼體制使得發送者和接收者之間以無密鑰傳輸的方法進行保密通信成爲了可能,彌補了對稱密碼體制的缺陷。

流程:

​ 發送者和接受者互相交換公鑰

​ 發送者使用對方的公鑰加密數據向接收方發送數據,接收者接受到數據後使用自身私鑰解密數據

​ 接收者使用對方的公鑰加密數據向發送者發送數據,發送接接受到接收者的數據後使用自身私鑰解密數據

在這裏插入圖片描述

3,散列函數

​ 散列函數的主要作用用來驗證數據完整性的重要技術,通過散列函數,發送方可以爲數據創建“數字指紋”,信息接受雙方商定具體的散列算法,並且該算法是公開的,如果消息在傳遞過程中唄篡改,則消息不能與已過的數字指紋相匹配,常用的算法有:MD,SHA,MAC等

4,數字簽名

​ 散列函數可以確保數據的完整性,那麼數字簽名是用來確保數據的可認證數據發送行爲的不可否認性。數字簽名針對以數字形式存儲的消息進行處理,產生一種帶有操作者身份信息的編碼,執行數字簽名的稱爲簽名者,簽名過程中使用的算法成爲簽名算法,簽名操作中生成的編碼成爲簽名者對該消息的數字簽名。發送者通過網絡將消息連同其數字簽名一起發送給接收者。接收者得到該消息以及數字簽名後,通過算法來驗證簽名真僞,即驗證的過程

5,公鑰基礎設施 PKI

PKI是什麼?

​ 公鑰基礎設施 PKI(Public Key Infranstructure) 是一個基於X.509的用於創建,分配和撤回證書的模型。

能幹啥?

​ PKI能夠利用公鑰密碼技術構建基礎設施,爲網絡傳輸的服務應用提供安全服務。

組成:

PKI的組成主要由:公鑰密碼技術數字證書證書認證中心,和關於公鑰的安全策略等基本成分共同組成,對密鑰和證書進行管理。

  • 公鑰密碼技術

    ​ 包含了堆成加密算法,非對稱加密算法,消息摘要算法,數字簽名等

  • 數字證書庫:

​ 用於存放已經簽發的數字證書和公鑰,用戶可以通過數字證書庫進行證書查詢

  • 證書認證中心(CA):

​ CA 是PKI核心之一,是數字證書的申請以及簽發機構,主要功能是證書發放,更新,撤銷,驗證等功能

6,Java安全領域組成部分

​ java安全領域包括分爲4個部分:JCA,JCE,JSSE,JAAS

  • JCA ( Java加密體系結構)主要是提供加密框架,如證書,數字簽名,信息摘要,密鑰對等產生器,主要是在java.security包中實現
  • JCE (java加密擴展包)提供各種加密算法如DES,AES,RSA等,信息摘要算法和密鑰管理功能等,是JCA的擴展
  • jSSE(java安全套接字擴展包)提供基於SSL的機密功能
  • JAAS(java鑑別與安全服務)提供Java平臺上進行用戶身份鑑別功能

JCA和JCE是java提供用於安全和加密服務的兩組API,並不執行任何算法,只是連接應用和實際算法實現程序的一組接口。軟件開發商可以根據JCE接口將各種算法實現,打包成一個provider,動態的加載到java的運行環境中,

JCA可以出口,而JCE是限制出口的,因此需要一個完整的機構,需要一個或多個第三方廠商提供的JCE產品,即他們被稱爲安全提供者

安取提供者接口的目的就是提供一個簡單的機制,從而可以很方便的改變或替換算法以及實現,程序員只需要用引擎類實現特定的操作,而不關心實際運行的是哪一個類

安全提供者接口主要是採用的是java的SPI機制來實現,javaSPi機制的移步:https://zhuanlan.zhihu.com/p/28909673

JCE中的算法提供是可以有多個提供商來提供,可以通過下面代碼來查看服務提供者

/**
 * @Author: zxx
 * @Description: 查看本地provider
 */
public class WatchProvider {

    public static void main(String[] args) {

        for (Provider p : Security.getProviders()) {
            System.out.println(p);
            for (Map.Entry entry :p.entrySet()) {
                System.out.println("\t"+entry.getKey());
            }
        }
    }

}

可以發現非常的多 我只截取了一部分

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章