① 非對稱加密的應用
應用1:加密通信
|明文|->公鑰加密->|密文|->私鑰解密->|明文|
這種加密路徑用於和他人進行加密通信,作用等同於對稱加密。
我們回到Alice和Bob的例子來看下。
如果Bob想利用非對稱加密演算法私密的接收他人向他發送的信息,步驟是這樣的。
1.首先Bob需要使用具體約定的演算法(例如RSA)生成密鑰和公鑰,密鑰自己保留,公鑰對外公布。
2.Alice拿到Bob的公鑰後,便可以對想要發送的消息「Alice已向Bob轉賬1BTC,請查收。」進行加密。
3.然後Alice將密文(例如是「FH39ggJ+shi3djifg35」)發送給Bob。
4.Bob收到消息後,用自己的私鑰進行解密,還原出消息原文「Alice已向Bob轉賬1BTC,請查收。」
由於使用Bob公鑰加密的消息只能用Bob的私鑰解密(Bob的公鑰也是不行的),而私鑰只有Bob擁有,因此即使消息被第三方劫持,他也無法還原出消漏譽息明文。
應用2:數字簽名
如果反過來,先用私鑰加密呢?這便誕生了非對稱加密的另一個重要應用中源:數字簽名
我們回到Alice和Bob的例子來看下。
在比特幣系統中,類似「Alice已向Bob轉賬1BTC,請查收。」這樣的消息最終會被礦工記錄在賬本上,是與轉賬雙方利益相關的。這樣一條消息的受益方是Bob,我們腹黑一點想,如果Bob一直向網路中廣播Alice給他轉賬的消息呢?
Bob:「Alice已向Bob轉賬1BTC」
Bob:「Alice已向Bob轉賬2BTC」
Bob:「Alice已向Bob轉賬3BTC」
…
因此,我們需要一種機制來證明Alice是「自願」的,也就是消息是Alice親自發出的。步驟是這樣的:
1.Alice需要使用具體約定的演算法(例如RSA)生成密鑰和公鑰,密鑰自己保留,公鑰賣搜態對外公布。
2.當Alice想要發送消息 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」。 時,Alice使用自己的私鑰對消息進行加密,假設加密後的密文是 SHG356g3T4+dh4fh,現在這個密文可以看作Alice的數字簽名。
3.Alice將消息明文和數字簽名放到一起並發送到網路中
發送的消息類似這樣的形式 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」。| 簽名:「SHG356g3T4+dh4fh」
4.網路中的所有人接收到消息後,都可以進行如下操作完成驗證:
收到消息 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」。| 簽名:「SHG356g3T4+dh4fh」
使用Alice在消息中提供的公鑰 gh3giPGFN2jgh3sF對私鑰簽署的數字簽名SHG356g3T4+dh4fh進行解密
將解密結果與消息明文 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:「gh3giPGFN2jgh3sF」進行對比
如果一致,說明消息是Alice親自發送的,因為只有Alice本人擁有Alice的密鑰
如果不一致,則說明消息不是Alice發送的,或者雖然消息是Alice發送的但已遭到他人篡改
5.於是,通過4中描述的方法,Bob確認了Alice給他了一筆價值1BTC的轉賬。
網路中其他人(礦工)均成功驗證了這條消息的真實性,並為Bob作證他的賬戶新增了1個BTC,Alice的賬戶減少了1個BTC。
② 非對稱加密解密RSA的實現例子
最近有接觸到加密相關的內容,本期以非對稱加密為例子,做個簡單的總結和記錄。首先了解下非對稱加密,簡單來說非對稱指的是加密和解密用不同的秘鑰,典型的RSA,這個演算法名稱是基於三個發明人的名字首字母取的;辯含碧而對稱加密必須要在加解密使用相同的秘鑰攜舉,典型的AES。這里細節不多展開闡述,涉及到很多數學原理,如大數的質因數分解等,感興趣的可以找找李永樂等網上比較優秀的科普。這篇文章只是java原生實現的加解密例子。至於其他的如md5,hash等,如果從主觀可讀的角度來說,也可以稱為加密。
如下的示例是使用Java原生實現RSA的加密解密,包括用公鑰加密,然後私鑰解密;或者使用私鑰加密,然後公鑰解密。注意不同key大小,限制的解密內容大小也不一樣,感老備興趣的同學可以試試修改key大小和加密內容長度來試試。還有要注意的是RSA加密有一定的性能損耗。
想了解原理相關的內容可以看如下的參考內容。
[1]. RSA原理
③ 非對稱加密的兩種應用場景
用一個數學上的小游戲作例子,老師讓學生任意想一個三位數的數字A,然後把A*91的乘積的末尾三位數告訴老師,老師把末尾三位數*11得到一個乘積,乘積的末尾三位數就是數字A。
比如,數字A為234,234*91=21294,學生把294告訴老師,294*11=3234,末尾三位數就是數字A。
這個游戲的原理在於(不理解也沒關系,不影響後面的學習):
91*11=1001,一個三位數*1001,相當於左移三位,然後再加上自己,因此一個三位腔族局數*1001的乘積的末尾三位數,一定等於該數
這個例子中,91就是公鑰,誰都可以用公鑰來加密,11是私鑰,只有一個人有,所以只有一個人可以解密。
本例中,公鑰私鑰的創建,是利用了1001=91*11,其安全性在於,把1001拆成穗型91和11很容易,但只憑91猜出1001和11很難。
我們還可以用更大的數字來做公鑰私鑰,比如400000001=19801*20201, =1199481995446957*3334772856269093,這樣就更加安全。不伍讓過,真正的非對稱加密演算法(比如RSA)原理遠比這復雜。
上面的例子,其實只是介紹了非對稱加密的第一種應用場景:
消息發送方用公鑰加密消息,接收方用私鑰解密。
實際上,非對稱加密還有第二種應用場景:
消息發送方用私鑰加密消息,接收方用公鑰解密,如果能解密成功,說明消息的來源可以信任。
備注
以上參考自 知乎
④ 非對稱加密的代表例子有哪些
非對稱加密主要演算法:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
使用最廣泛的是RSA演算法,Elgamal是另一種常用的非對稱加密演算法。
經典的非對稱加密演算法如RSA演算法等安全性都相當高.
非對稱加密的典型應用是數字簽名。
⑤ 非對稱加密演算法
如果要給世界上所有演算法按重要程度排個序,那我覺得「公鑰加密演算法」一定是排在最前邊的,因為它是現代計算機通信安全的基石,保證了加密數據的安全。
01 對稱加密演算法
在非對稱加密出現以前,普遍使用的是對稱加密演算法。所謂對稱加密,就是加密和解密是相反的操作,對數據進行解密,只要按加密的方式反向操作一遍就可以獲得對應的原始數據了,舉一個簡單的例子,如果要對字元串"abc"進行加密,先獲取它們的ANSCII碼為:97 98 99;密鑰為+2,加密後的數據就是:99 100 101,將密文數據發送出去。接收方收到數據後對數據進行解密,每個數據減2,就得到了原文。當然這只是一個非常簡單的例子,真實的對稱加密演算法會做得非常復雜,但這已經能夠說明問題了。
這樣的加密方法有什麼缺點呢?首先缺點一:密鑰傳遞困難;想想看如果兩個人,分別是Bob和Alice,Bob要給Alice發消息,那Bob就要把密鑰通過某種方式告訴Alice,有什麼可靠的途徑呢?打電話、發郵件、寫信...等等方式好像都不靠譜,都有被竊取的風險,也只有兩人見面後當面交流這一種方式了;缺點二:密鑰數量會隨著通信人數的增加而急劇增加,密鑰管理將會是一個非常困難的事情。
02 非對稱加密演算法
1976年,兩位美國計算機學家,提出了Diffie-Hellman密鑰交換演算法。這個演算法的提出了一種嶄新的構思,可以在不直接傳遞密鑰的情況下,完成解密。這個演算法啟發了其他科學家,讓人們認識到,加密和解密可以使用不同的規則,只要這兩種規則之間存在某種對應的關系即可,這樣就避免了直接傳遞密鑰。這種新的加密模式就是「非對稱加密演算法」。
演算法大致過程是這樣的:
(1)乙方 生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。
(2)甲方獲取乙方的公鑰,然後用它對信息加密。
(3)乙方得到加密後的信息,用私鑰解密。
如果公鑰加密的信息只有私鑰解得開,那麼只要私鑰不泄漏,通信就是安全的。
03 RSA非對稱加密演算法
1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫做RSA演算法。
從那時直到現在,RSA演算法一直是最廣為使用的"非對稱加密演算法"。毫不誇張地說,只要有計算機網路的地方,就有RSA演算法。這種演算法非常可靠,密鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長RSA密鑰是768個二進制位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。
公鑰加密 -> 私鑰解密
只有私鑰持有方可以正確解密,保證通信安全
私鑰加密 -> 公鑰解密
所有人都可以正確解密,信息一定是公鑰所對應的私鑰持有者發出的,可以做簽名
04 質數的前置知識
RSA的安全性是由大數的質因數分解保證的。下面是一些質數的性質:
1、任意兩個質數構成素質關系,比如:11和17;
2、一個數是質數,另一個數只要不是前者的倍數,兩者就構成素質關系,比如3和10;
3、如果兩個數之中,較大的那個是質數,則兩者構成互質關系,比如97和57;
4、1和任意一個自然數都是互質關系,比如1和99;
5、p是大於1的整數,則p和p-1構成互質關系,比如57和56;
6、p是大於1的奇數,則p和p-2構成互質關系,比如17和15
05 RSA密鑰生成步驟
舉個「栗子「,假如通信雙方為Alice和Bob,Alice要怎麼生成公鑰和私鑰呢?
St ep 1:隨機選擇兩個不相等的質數p和q;
Alice選擇了3和11。(實際情況中,選擇的越大,就越難破解)
S tep 2 :計算p和q的乘積n;
n = 3*11 = 33,將33轉化為二進制:100001,這個時候密鑰長度就是6位。
Step 3 :計算n的歐拉函數φ(n);
因為n可以寫為兩個質數相乘的形式,歐拉函數對於可以寫成兩個質數形式有簡單計算方式
φ(n) = (p-1)(q-1)
Step 4 :隨機選擇一個整數e,條件是1< e < φ(n),且e與φ(n) 互質;
愛麗絲就在1到20之間,隨機選擇了3
Step 5 :計算e對於φ(n)的模反元素d
所謂模反元素,就是指有一個整數d,可以使得ed被φ(n)除的余數為1
Step 6 :將n和e封裝成公鑰,n和d封裝成私鑰;
在上面的例子中,n=33,e=3,d=7,所以公鑰就是 (33,3),私鑰就是(33, 7)。
密鑰生成步驟中,一共出現了六個數字,分別為:
素質的兩個數p和q,乘積n,歐拉函數φ(n),隨機質數e,模反元素d
這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的,可以刪除。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。
那麼,有無可能在已知n和e的情況下,推導出d?
(1)ed 1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有將n因數分解,才能算出p和q。
結論是如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。
BUT!
大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。
維基網路這樣寫道:
"對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。
假如有人找到一種快速因數分解的演算法,那麼RSA的可靠性就會極度下降。但找到這樣的演算法的可能性是非常小的。今天只有較短的RSA密鑰才可能被暴力破解。到現在為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。
只要密鑰長度足夠長,用RSA加密的信息實際上是不能被解破的。"
06 RSA加密和解密過程
1、加密要用公鑰(n,e)
假設鮑勃要向愛麗絲發送加密信息m,他就要用愛麗絲的公鑰 (n,e) 對m進行加密。
所謂"加密",就是算出下式的c:
愛麗絲的公鑰是 (33, 3),鮑勃的m假設是5,那麼可以算出下面的等式:
於是,c等於26,鮑勃就把26發給了愛麗絲。
2、解密要用私鑰(n,d)
愛麗絲拿到鮑勃發來的26以後,就用自己的私鑰(33, 7) 進行解密。下面的等式一定成立(至於為什麼一定成立,證明過程比較復雜,略):
也就是說,c的d次方除以n的余數為m。現在,c等於26,私鑰是(33, 7),那麼,愛麗絲算出:
因此,愛麗絲知道了鮑勃加密前的原文就是5。
至此,加密和解密的整個過程全部完成。整個過程可以看到,加密和解密使用不用的密鑰,且不用擔心密鑰傳遞過程中的泄密問題,這一點上與對稱加密有很大的不同。由於非對稱加密要進行的計算步驟復雜,所以通常情況下,是兩種演算法混合使用的。
07 一些其它的
在Part 5的第五步,要求一定要解出二元一次方程的一對正整數解,如果不存在正整數解,這該怎麼辦?
擴展歐幾里得演算法給出了解答:
對於不完全為 0 的非負整數 a,b,gcd(a,b)表示 a,b 的最大公約數,必然存在整數對 x,y ,使得 gcd(a,b)=ax+by;
第五步其實等價於:ed - kφ(n) = 1, e與φ(n)又互質,形式上完全與擴展歐幾里得演算法的一致,所以一定有整數解存在。
Reference:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
⑥ 什麼是非對稱加密密鑰為什麼可以證明我的身份
公鑰私鑰是非對稱加密的典型例子。公鑰負責加密,私鑰負責解密。使用非對稱加密,連接方式只有一條路。瀏覽器使用非對稱加密來驗證公私鑰對,以及擴展證書本身。為此,瀏覽器將使用隨時可用的公鑰來加密一小撮一次性數據。 如果伺服器能夠解密這個數據並以明文形式發回,那麼它證明了它的私鑰對應於公鑰。至此,瀏覽器和伺服器可以開始他們的加密鏈接了。
⑦ 圖文徹底搞懂非對稱加密(公鑰密鑰)
前文詳細講解了對稱加密及演算法原理。那麼是不是對稱加密就萬無一失了呢?對稱加密有一個天然的缺點,就是加密方和解密方都要持有同樣的密鑰。你可以能會提出疑問:既然要加、解密,當然雙方都要持有密鑰,這有什麼問題呢?別急,我們繼續往下看。
我們先看一個例子,小明和小紅要進行通信,但是不想被其他人知道通信的內容,所以雙方決定採用對稱加密的方式。他們做了下面的事情:
1、雙方商定了加密和解密的演算法
2、雙方確定密鑰
3、通信過程中採用這個密鑰進行加密和解密
這是不是一個看似完美的方案?但其中有一個步驟存在漏洞!
問題出在步驟2:雙方確定密鑰!
你肯定會問,雙方不確定密鑰,後面的加、解密怎麼做?
問題在於確定下來的密鑰如何讓雙方都知道。密鑰在傳遞過程中也是可能被盜取的!這里引出了一個經典問題:密鑰配送問題。
小明和小紅在商定密鑰的過程中肯定會多次溝通密鑰是什麼。即使單方一次確定下來,也要發給對方。加密是為了保證信息傳輸的安全,但密鑰本身也是信息,密鑰的傳輸安全又該如何保證呢?難不成還要為密鑰的傳輸再做一次加密?這樣不就陷入了死循環?
你是不是在想,密鑰即使被盜取,不還有加密演算法保證信息安全嗎?如果你真的有這個想法,那麼趕緊復習一下上一篇文章講的杜絕隱蔽式安全性。任何演算法最終都會被破譯,所以不能依賴演算法的復雜度來保證安全。
小明和小紅現在左右為難,想加密就要給對方發密鑰,但發密鑰又不能保證密鑰的安全。他們應該怎麼辦呢?
有如下幾種解決密鑰配送問題的方案:
非對稱加密也稱為公鑰密碼。我更願意用非對稱加密這種叫法。因為可以體現出加密和解密使用不同的密鑰。
對稱加密中,我們只需要一個密鑰,通信雙方同時持有。而非對稱加密需要4個密鑰。通信雙方各自准備一對公鑰和私鑰。其中公鑰是公開的,由信息接受方提供給信息發送方。公鑰用來對信息加密。私鑰由信息接受方保留,用來解密。既然公鑰是公開的,就不存在保密問題。也就是說非對稱加密完全不存在密鑰配送問題!你看,是不是完美解決了密鑰配送問題?
回到剛才的例子,小明和下紅經過研究發現非對稱加密能解決他們通信的安全問題,於是做了下面的事情:
1、小明確定了自己的私鑰 mPrivateKey,公鑰 mPublicKey。自己保留私鑰,將公鑰mPublicKey發給了小紅
2、小紅確定了自己的私鑰 hPrivateKey,公鑰 hPublicKey。自己保留私鑰,將公鑰 hPublicKey 發給了小明
3、小明發送信息 「周六早10點soho T1樓下見」,並且用小紅的公鑰 hPublicKey 進行加密。
4、小紅收到信息後用自己的私鑰 hPrivateKey 進行解密。然後回復 「收到,不要遲到」 並用小明的公鑰mPublicKey加密。
5、小明收到信息後用自己的私鑰 mPrivateKey 進行解密。讀取信息後心裡暗想:還提醒我不遲到?每次遲到的都是你吧?
以上過程是一次完整的request和response。通過這個例子我們梳理出一次信息傳輸的非對稱加、解密過程:
1、消息接收方准備好公鑰和私鑰
2、私鑰接收方自己留存、公鑰發布給消息發送方
3、消息發送方使用接收方公鑰對消息進行加密
4、消息接收方用自己的私鑰對消息解密
公鑰只能用做數據加密。公鑰加密的數據,只能用對應的私鑰才能解密。這是非對稱加密的核心概念。
下面我用一個更為形象的例子來幫助大家理解。
我有下圖這樣一個信箱。
由於我只想接收我期望與之通信的朋友信件。於是我在投遞口加了一把鎖,這把鎖的鑰匙(公鑰)我可以復制n份,發給我想接受其信件的人。只有這些人可以用這把鑰匙打開寄信口,把信件投入。
相信通過這個例子,可以幫助大家徹底理解公鑰和私鑰的概念。
RSA 是現在使用最為廣泛的非對稱加密演算法,本節我們來簡單介紹 RSA 加解密的過程。
RSA 加解密演算法其實很簡單:
密文=明文^E mod N
明文=密文^D mod N
RSA 演算法並不會像對稱加密一樣,用玩魔方的方式來打亂原始信息。RSA 加、解密中使用了是同樣的數 N。公鑰是公開的,意味著 N 也是公開的。所以私鑰也可以認為只是 D。
我們接下來看一看 N、E、D 是如何計算的。
1、求 N
首先需要准備兩個很大質數 a 和 b。太小容易破解,太大計算成本太高。我們可以用 512 bit 的數字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密鑰對過程中產生的數,並不參與加解密。L 是 (a-1) 和 (b-1) 的最小公倍數
3、求 E(公鑰)
E 有兩個限制:
1<E<
E和L的最大公約數為1
第一個條件限制了 E 的取值范圍,第二個條件是為了保證有與 E 對應的解密時用到的 D。
4、求 D(私鑰)
D 也有兩個限制條件:
1<D<L
E*D mod L = 1
第二個條件確保密文解密時能夠成功得到原來的明文。
由於原理涉及很多數學知識,這里就不展開細講,我們只需要了解這個過程中用到這幾個數字及公式。這是理解RSA 安全性的基礎。
由於 N 在公鑰中是公開的,那麼只需要破解 D,就可以解密得到明文。
在實際使用場景中,質數 a,b 一般至少1024 bit,那麼 N 的長度在 2048 bit 以上。D 的長度和 N 接近。以現在計算機的算力,暴力破解 D 是非常困難的。
公鑰是公開的,也就是說 E 和 N 是公開的,那麼是否可以通過 E 和 N 推斷出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍數。想知道 L 就需要知道質數 a 和 b。破解者並不知道這兩個質數,想要破解也只能通過暴力破解。這和直接破解 D 的難度是一樣的。
等等,N 是公開的,而 N = a*b。那麼是否可以對 N 進行質因數分解求得 a 和 b 呢?好在人類還未發現高效進行質因數分解的方法,因此可以認為做質因數分解非常困難。
但是一旦某一天發現了快速做質因數分解的演算法,那麼 RSA 就不再安全
我們可以看出大質數 a 和 b 在 RSA 演算法中的重要性。保證 a 和 b 的安全也就確保了 RSA 演算法的安全性。a 和 b 是通過偽隨機生成器生成的。一旦偽隨機數生成器的演算法有問題,導致隨機性很差或者可以被推斷出來。那麼 RSA 的安全性將被徹底破壞。
中間人攻擊指的是在通信雙方的通道上,混入攻擊者。他對接收方偽裝成發送者,對放送放偽裝成接收者。
他監聽到雙方發送公鑰時,偷偷將消息篡改,發送自己的公鑰給雙方。然後自己則保存下來雙方的公鑰。
如此操作後,雙方加密使用的都是攻擊者的公鑰,那麼後面所有的通信,攻擊者都可以在攔截後進行解密,並且篡改信息內容再用接收方公鑰加密。而接收方拿到的將會是篡改後的信息。實際上,發送和接收方都是在和中間人通信。
要防範中間人,我們需要使用公鑰證書。這部分內容在下一篇文章里會做介紹。
和對稱加密相比較,非對稱加密有如下特點:
1、非對稱加密解決了密碼配送問題
2、非對稱加密的處理速度只有對稱加密的幾百分之一。不適合對很長的消息做加密。
3、1024 bit 的 RSA不應該在被新的應用使用。至少要 2048 bit 的 RSA。
RSA 解決了密碼配送問題,但是效率更低。所以有些時候,根據需求可能會配合使用對稱和非對稱加密,形成混合密碼系統,各取所長。
最後提醒大家,RSA 還可以用於簽名,但要注意是私鑰簽名,公鑰驗簽。發信方用自己的私鑰簽名,收信方用對方公鑰驗簽。關於簽名,後面的文章會再詳細講解。
⑧ 數據加密(對稱加密和非對稱加密)
通過網路通信的五層模型(ISO規定的是七層模型,TCP/IP規定的是五層模型)可以實現兩個應用程序之間的數據通信
但是現在有個問題是 數據如何加密,總不能兩個人之間說的話讓第三個人活著別的人聽到吧
那最簡單的例子就是:A和B之間傳遞數據,如何保證數據不被第三個人知道,或者說第三個人就算知道數據,但是不知道數據所代表的意思。
在傳遞數據時候不能避免傳遞的數據被別的人知道,那我們能做的就是讓第三個人不知道數據所表達的意思就好了。
A 和 B 約定一套規則,A 通過這套規則將要發送的數據改變, 稱作加密 ,B 接受到數據,在用這套規則將數據還原成原來的數據 稱作解密 。這就完成了一次加密數據傳輸。
因為數據傳輸的方式無外乎就有兩種形式;1.通過無線的方式,對應的就是(電磁波)。2.通過有線連接的方式(網線)數據就是轉化為0,1,0,1的這種二進制來傳送的。
假如A 要發送一組數據為010101010101,A約定的規則是按位取反,通過這套規則數據就變成了101010101010,將變化後的數據發送給B,B得到這個數據,通過按位取反,將這套數據變成原來的樣子也就是將1010101010按位置取反變成010101010101,在這個傳輸過程中有人得到了這個數據,那得到的也是101010101010,他並不知道這套規則,那即使知道了數據,也並不影響什麼。
在上面的過程中這套規則就叫做 ------- 公鑰 ----------
上面的過程就叫做對稱加密
對稱加密是一種思想,具體的實現就是演算法,有很多的對稱加密的演算法 比如 DES演算法
對稱的意思就是 加密和解密用的是一套規則
說到這里對稱加密大體說明白了一點。但不要停下思考的步伐,那請思考一個問題
新的問題又擺在了眼前。。。。。。怎麼搞,,怎麼半
這個時候非對稱加密就出現了,就是這樣。在一個合適的時間 出現一個合適的東西。
扯多了,回歸正題:
繼續上面的情景 A 和 B 倆交流,互通數據,解決上面出現的問題那就定義兩套規則,一套加密(俗稱公鑰),一套解密(俗稱私鑰),那A又一對鑰匙(即就是一個公鑰,一個私鑰),B也有一對鑰匙。如果A想要給B傳數據 那就先用B 的公鑰將數據加密,然後通過網路傳給B。B 接受到數據後,通過自己的私鑰將數據解密 ,就得到A 所傳的真正的數據。 同樣的道理 B 想給A傳數據,那就先通過網路得到A的公鑰,然後加密數據,通過網路傳給A ,A得到數據後用自己的私鑰解密,就可以得到B 傳給A的真正的數據。
上面的過程就是非對稱加密,所謂非對稱就是有兩套規則,一套是公鑰,一套是私鑰。
這種規則其實就是演算法,當然這種非對稱加密演算法有很多,但是現在比較常用的就是RSA演算法 RSA演算法
那寫到這里基本的也就差不多了。數據加密傳輸也就完成了,基本沒什麼問題,但是網路傳數據當然是越快越好,那我接下來就是要寫一些兩個加密方式的優缺點:
對稱加密 ---------簡單,因為只有一套規則。
--------- 速度快,因為只有一套規則。
非對稱加密 ------- 復雜,兩套規則
--------速度慢,兩套規則
公鑰 說到底也就是數據。那數據要怎麼傳 !!!!! 是不是很眼熟,這不就是我們之前將的問題嗎? 我們可以用非對稱加密將對稱加密的公鑰傳過去,那之前對稱加密的問題不就解決了嗎? 然後可以放心大膽的使用對稱加密了。有沒有?
一般先都是用非對稱加密將對稱加密的公鑰傳過去,然後使用對稱加密。。那數據的處理速度就很快。
ok 就到這了……