久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

非對稱加密過程詳解(基于RSA非對稱加密算法實現(xiàn))

 liang1234_ 2018-03-13
1,、非對稱加密過程:
        假如現(xiàn)實世界中存在A和B進行通訊,為了實現(xiàn)在非安全的通訊通道上實現(xiàn)信息的保密性,、完整性,、可用性(即信息安全的三個性質(zhì)),A和B約定使用非對稱加密通道進行通訊,,具體過程如下:
        說明:
        國內(nèi)目前使用雙證書體系,,即用戶同時擁有簽名證書、加密證書兩張證書,。簽名證書是用戶的身份認證,,是和CA協(xié)商的結(jié)果,可用于對用戶A的身份驗證,;加密證書是用來對信息進行加密,,是用戶和秘鑰管理系統(tǒng)生成。我們在這里假設(shè)都適合CA進行交互,。
        ①:此過程是生成公鑰私鑰的過程,,我們這里基于RSA算法實現(xiàn),RSA算法的詳細說明在后面講解,。
        ②:此過程是CA對用戶的身份進行簽名,,目的驗證A的身份。這樣在A與B通訊的過程中,,A可以把自己的數(shù)字簽名發(fā)給B,,B得到此數(shù)字簽名后就可以通過CA的公鑰對其進行解密并進行身份驗證,具體過程在后面講解,。
        ③④同理,。
        ⑤:A對要傳輸?shù)男畔⑦M行加密并傳輸,B接受到以后進行解密的過程,。
 
2,、RSA算法:
        RSA原理:RSA算法基于一個十分簡單的數(shù)論事實:將兩個大素數(shù)相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,,因此可以將乘積公開作為加密密鑰。
        算法:
        (1)選擇兩個不同的大素數(shù)p和q,;
        (2)計算乘積n=pq和Φ(n)=(p-1)(q-1),;
        (3)選擇大于1小于Φ(n)的隨機整數(shù)e,使得gcd(e,Φ(n))=1,;注:gcd即最大公約數(shù),。
        (4)計算d使得d*e=1mod Φ(n),;注:即d*e mod Φ(n) =1。
        (5)對每一個密鑰k=(n,p,q,d,e),,定義加密變換為Ek(x)=xe mod n,,解密變換為Dk(x)=yd mod n,這里x,y∈Zn,;
        (6)p,q銷毀,,以{e,n}為公開密鑰,{d,n}為私有密鑰,。
        實例:
        1. 假設(shè)p = 3,、q = 11(p,q都是素數(shù)即可,。),,則N = pq = 33;
        2. r =Φ(n)= (p-1)(q-1) = (3-1)(11-1) = 20,;
        3. 根據(jù)gcd(e,Φ(n))=1,,即gcd(e,20)=1,令e=3,,則,,d = 7。(兩個數(shù)交換一下也可以,。)

  到這里,,公鑰和密鑰已經(jīng)確定。公鑰為(N, e) = (33, 3),,密鑰為(N, d) = (33, 7),。

        代碼實現(xiàn):
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
public class SimpleRSA {
    /**
     * 加密、解密算法
     * @param key 公鑰或密鑰
     * @param message 數(shù)據(jù)
     * @return
     */
    public static long rsa(int baseNum, int key, long message){
        if(baseNum < 1 || key < 1){
            return 0L;
        }
        //加密或者解密之后的數(shù)據(jù)
        long rsaMessage = 0L;
           
        //加密核心算法
        rsaMessage = Math.round(Math.pow(message, key)) % baseNum;
        return rsaMessage;
    }
    public static void main(String[] args){
        //基數(shù)
        int baseNum = 3 * 11;
        //公鑰
        int keyE = 3;
        //密鑰
        int keyD = 7;
        //未加密的數(shù)據(jù)
        long msg = 24L;
        //加密后的數(shù)據(jù)
        long encodeMsg = rsa(baseNum, keyE, msg);
        //解密后的數(shù)據(jù)
        long decodeMsg = rsa(baseNum, keyD, encodeMsg);
           
        System.out.println('加密前:' msg);
        System.out.println('加密后:' encodeMsg);
        System.out.println('解密后:' decodeMsg);
    }

  

        結(jié)果:這樣CA就保存了用戶的公鑰,,其他任何人想法送給此用戶信息,,只需查詢詞公鑰,加密發(fā)送即可,,而此用戶用只有自己知道的秘鑰解密,。
 
3、簽名證書:
        簽名證書的用途:加入有A用戶向B用戶發(fā)送了信息“A love you”,,B接收到之后怎么確定就是A發(fā)送的呢(因為中間人攻擊中,,假如C截獲了A發(fā)送的信息后,改成“C love you”,,B是無法確定這兩個信息的發(fā)送者,,因他她們都同樣用B的工要加密),于是產(chǎn)生了簽名證書技術(shù)。
        簽名證書是由CA用自己的私鑰對用戶的信息進行加密,,并把發(fā)給用戶的,,用戶可以在發(fā)送信息的過程中附加上自己的簽名證書,讓接受者驗證信息的來源,。當(dāng)接受者接受到發(fā)送者的簽名證書后即可用ca的公鑰解密驗證發(fā)送者的身份信息,。
 
4、信息傳輸:
   過程:
        A. Alice 準(zhǔn)備好要傳送的數(shù)字信息(明文),。

        B. Alice 對數(shù)字信息進行哈希(hash)運算,,得到一個信息摘要。

        C. Alice 用自己的私鑰(SK)對信息摘要進行加密得到Alice 的數(shù)字簽名,,并將其附在數(shù)字信息上,。
        D. Alice 用Bob 的公鑰(PK)對剛才隨機產(chǎn)生的加密密鑰進行加密,將加密后的密文傳送給Bob
        E. Bob 收到Alice 傳送過來的密文,,用自己的私鑰(SK)對密文解密,。

        F. Bob 用Alice 的公鑰(PK)對Alice 的數(shù)字簽名進行解密,得到信息摘要,。

        G. Bob 用相同的hash 算法對收到的明文再進行一次hash 運算,,得到一個新的信息摘要。
        H. Bob 將收到的信息摘要和新產(chǎn)生的信息摘要進行比較,,如果一致,,說明收到的信息沒有被修改過。
 
        采用數(shù)字簽名,,能完成這些功能:
       (1)確認信息是由簽名者發(fā)送的,; 
        (2)確認信息自簽名后到收到為止,未被修改過,; 
       (3)簽名者無法否認信息是由自己發(fā)送的,。
        
        但是上述過程存在問題,例如有用戶C竊取A的電腦信息,,把B的公鑰修改成了自己的公鑰,,A用此公鑰加密信息發(fā)給B,C在中間截獲這個數(shù)據(jù)就可以獲取這些私密信息,。怎么應(yīng)對這種情況呢,?簽名證書就派上用場了。
         證書中心用自己的私鑰,,對每一個用戶的,、的公鑰和一些相關(guān)信息一起加密,生成'數(shù)字證書'(Digital Certificate),。發(fā)送者在發(fā)送信息之前如果想核對接受者的公鑰,,只需用CA的公鑰對B的簽名證書進行解密確認即可,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多