c公鑰私鑰加密
① 非對稱加密中,公鑰在什麼情況下用於加密,什麼情況用於解密
在進行加密的時候,公鑰用於加密,私鑰用於解密
在進行數字簽名的時候,私鑰用於解密,公鑰用於加密
② 什麼是公鑰加密
什麼是公鑰加密
公鑰加密,也叫非對稱(密鑰)加密(public key encryption),屬於通信科技下的網路安全二級學科,指的是由對應的一對唯一性密鑰(即公開密鑰和私有密鑰)組成的加密方法。它解決了密鑰的發布和管理問題,是目前商業密碼的核心。在公鑰加密體制中,沒有公開的是明文,公開的是密文,公鑰,演算法。
常見演算法
RSA、ElGamal、背包演算法、Rabin(Rabin的加密法可以說是RSA方法的特例)、Diffie-Hellman (D-H) 密鑰交換協議中的公鑰加密演算法、Elliptic Curve Cryptography(ECC,橢圓曲線加密演算法)。使用最廣泛的是RSA演算法(由發明者Rivest、Shmir和Adleman姓氏首字母縮寫而來)是著名的公開金鑰加密演算法,ElGamal是另一種常用的非對稱加密演算法。
緣起
該思想最早由雷夫·莫寇(Ralph C. Merkle)在1974年提出,之後在1976年。狄菲(Whitfield Diffie)與赫爾曼(Martin Hellman)兩位學者以單向函數與單向暗門函數為基礎,為發訊與收訊的兩方創建金鑰。
非對稱
是指一對加密密鑰與解密密鑰,這兩個密鑰是數學相關,用某用戶密鑰加密後所得的信息,只能用該用戶的解密密鑰才能解密。如果知道了其中一個,並不能計算出另外一個。因此如果公開了一對密鑰中的一個,並不會危害到另外一個的秘密性質。稱公開的密鑰為公鑰;不公開的密鑰為私鑰。
如果加密密鑰是公開的,這用於客戶給私鑰所有者上傳加密的數據,這被稱作為公開密鑰加密(狹義)。例如,網路銀行的客戶發給銀行網站的賬戶操作的加密數據。
如果解密密鑰是公開的,用私鑰加密的信息,可以用公鑰對其解密,用於客戶驗證持有私鑰一方發布的數據或文件是完整准確的,接收者由此可知這條信息確實來自於擁有私鑰的某人,這被稱作數字簽名,公鑰的形式就是數字證書。例如,從網上下載的安裝程序,一般都帶有程序製作者的數字簽名,可以證明該程序的確是該作者(公司)發布的而不是第三方偽造的且未被篡改過(身份認證/驗證)。
③ 四、公鑰和私鑰,加密和數字簽名
本文涉及到支付寶SDK的內容,均摘自支付寶開放平台。
因為支付寶SDK使用RSA來加密和生成數字簽名,所以本文中涉及到的概念也都是針對於RSA的。
一對兒密鑰生成後,會有公鑰和私鑰之分,我們需要把私鑰保存下來,而把公鑰發布出去。一對兒公鑰和私鑰,不能由其中一個導出另一個。
比如使用支付寶SDK的時候,我們商戶端會生成一對兒密鑰A和B,A是私鑰,B是公鑰,支付寶也會生成一對兒密鑰C和D,C是私鑰,D是公鑰。我們商戶端需要把商戶端私鑰A保存下來,而把商戶端公鑰B發布出去給支付寶,支付寶需要把支付寶私鑰C保存下來,而把支付寶公鑰D發布出去給我們商戶端。
加密是指我們使用一對兒密鑰中的一個來對數據加密,而使用另一個來對數據解密的技術,需要注意的是公鑰和私鑰都可以用來加密,也都可以用來解密 ,並不是規定死了只能用公鑰加密私鑰解密,但是加解密必須是一對兒密鑰之間的互相加解密,否則不能成功。
加密的目的是為了保證數據的不可讀性,防止數據在傳輸過程中被截獲。
知道了加密這個概念,我們先看一下支付寶的加密過程,再引出數字簽名這個概念。接著第1小節的例子,當我們商戶端和支付寶互相發布了公鑰之後,我們商戶端手裡就有 商戶端私鑰 和 支付寶公鑰 兩個密鑰,支付寶手裡也有 商戶端公鑰 和 支付寶私鑰 兩個密鑰。現在假設我們商戶端要給支付寶傳輸訂單信息,那麼為了保證傳輸訂單信息時數據的安全性,結合我們商戶端手裡所擁有的密鑰,可以有兩套加密方案
貌似這兩套加密方案都能達到對訂單信息加密的效果,而且如果採用方案二,我們商戶端甚至只需要存儲支付寶公鑰這一個密鑰,都不用去申請一對兒商戶端的公私鑰來維護,支付寶也不用保存我們一堆商戶那麼多的商戶端公鑰了,這不是更簡單嗎,那為什麼支付寶開放平台讓我們採用的是方案一而不是方案二呢?下面來回答一下。
支付寶開放平台說明:當我們採用RSA(1024位密鑰)來加密的時候,支付寶分配給所有商戶的支付寶公鑰都是一樣的,即支付寶針對那麼多的商戶只負責維護一對兒支付寶公私鑰,這就意味著支付寶公鑰隨便什麼人拿到後都是一樣的;而當我們採用RSA2(2048位密鑰)來加密的時候,支付寶會分配給每個商戶單獨的一個支付寶公鑰,即支付寶為每一個的商戶單獨的維護一對獨立的支付寶公私鑰,當然一個商戶下的多個App的支付寶公鑰是一樣的。RSA是早就支持的,RSA2是最近才支持的。
知道了上面這段話,現在假設我們採用的是方案二,並且採用RSA加密(很多老業務並沒有使用RSA2加密),業務邏輯將會是下面這樣。
這就出問題了, RSA加密下,支付寶公鑰是公開發布的,而且所有的商戶用的都是同一個支付寶公鑰(上面聲明了RSA2加密下,支付寶才針對每個商戶維護了一對兒公私鑰),攻擊者很容易就能獲取到,而 notify_url 也很容易被截獲,那攻擊者拿到這兩個東西就可以做和商戶一樣的操作來發起支付請求,這樣就會一直給小明充錢了。
所以 支付寶就需要確認支付請求確實是商戶發給他們的,而不是攻擊者發給他們的。 這就用到了 數字簽名 ,我們會通過方案一的實現流程來引出數字簽名的具體概念。如果我們採用的是方案一,我們商戶端保存的就是商戶端私鑰和支付寶公鑰,而支付寶保存的就是需要存著商戶端公鑰和支付寶私鑰的,業務邏輯將會是下面這樣。
這樣就可以保證交易的安全性了,我們也可以看出使用支付寶SDK保證交易的安全性注重的其實不是訂單信息是否加密,而是如何確保商戶端和支付寶能夠互相確認身份,訂單信息是明文的,但是後面拼接了數字簽名。
數字簽名其實就是明文數據加密之後得到的一個密文,只不過它是用私鑰加密生成的而已,我們一般會把數字簽名拼接在明文數據後面一起傳遞給接收方,接收方收到後用公鑰解密數字簽名,從而驗證發送方的身份、以及明文數據是否被篡改。數字簽名的生成過程其實就是一個加密過程,數字簽名的驗簽過程就是一個解密過程。
數字簽名的目的有兩個:一、發送方和接收方互相驗證身份;二、驗證數據是否被篡改。
從上面第一部分我們知道為了確保商戶和支付寶交易的安全性,約定採用的是給訂單信息加數字簽名傳輸的方式。支付寶也為我們提供了 一鍵生成RSA密鑰的工具 ,可以幫助我們很快的生成一對商戶端公私鑰。以下會對支付寶SDK的支付流程做個大概的解釋,並點出實際開發中我們使用支付寶SDK時應該注意的地方。
由我們商戶端自己生成的RSA私鑰(必須與商戶端公鑰是一對),生成後要保存在服務端,絕對不能保存在客戶端,也絕對不能從服務端傳輸給客戶端。
用來對訂單信息加簽,加簽過程一定要在服務端完成,絕對不能在客戶端做加,客戶端只負責用加簽後的訂單信息調起支付寶來支付。
由我們商戶端自己生成的RSA公鑰(必須與商戶端私鑰是一對),生成後需要填寫在支付寶開放平台。
用來給支付寶服務端驗簽經過我們加簽後的訂單信息,以確保訂單信息確實是我們商戶端發給支付寶的,並且確保訂單信息在傳輸過程中未被篡改。
這個和我們就沒關系了,支付寶私鑰是他們自己生成的,也是他們自己保存的。
用來對支付結果進行加簽。
支付寶公鑰和支付寶私鑰是一對,也是支付寶生成的,當我們把商戶端公鑰填寫在支付寶開放平台後,平台就會給我們生成一個支付寶公鑰,我們可以復制下來保存在服務端,同樣不要保存在客戶端,並且不要傳輸給客戶端。
用來讓服務端對支付寶服務端返給我們的同步或非同步支付結果進行驗簽,以確保支付結果確實是由支付寶服務端返給我們服務端的,而且沒有被篡改,對支付結果的驗簽工作也一定要在服務端完成。
上面已經說過了: 訂單信息的加簽和支付結果的驗簽是一定要在服務端做的,絕對不能在客戶端做。
下面是在客戶端對訂單信息加簽的過程,僅僅是為了模擬服務端來表明訂單信息是如何通過加簽最終轉變為orderString的, 千萬不要覺得訂單信息的加簽過程也可以放在客戶端完成 。
假設我們服務端收到了來自支付寶服務端的支付結果,即: 支付結果+數字簽名 。
那麼我們服務端就會對支付結果進行驗簽,怎麼個驗法呢?
④ 【簡譯】公鑰加密是如何工作的
最近在學習非對稱加密的時候,在外網看到的一篇不錯的「掃盲」文,遂簡譯過來分享給大家。
公鑰加密,又稱作非對稱加密,使用的是兩個key而不是一個共享的key。這兩個key分別稱作:公鑰(public key)和私鑰(private key)。公鑰加密在網路安全領域是非常重要的技術。
公鑰加密是一個是用到兩個不同的key的加密數據的方法,這其中,公鑰是公開的,允許任何人使用的,相反的,私鑰是保密的、私有的。使用公鑰加密的數據 只能夠 被私鑰解密,反過來同樣,使用私鑰加密的數據 只能夠 被公鑰解密( 木:"注意這里很多人誤以為只能公鑰加密私鑰解密。" )。公鑰加密同樣被稱作非對稱加密,它的使用非常廣泛,典型的例子就是TLS/SSL,它讓HTTPS成為了可能。
在密碼學中,一串key可以用來打亂數據從而讓數據看起來變得雜亂無章,通常這串key是一個非常大的數字,或者一串數字字母組合。當把未加密的數據,即明文數據,放到一個含有key的加密演算法中,在結果中就會得到一串看起來非常隨機和雜亂的「數據」。這時候,只有一個擁有正確的key的人才可以將它變回原形,解密並且得到正確的明文數據。
舉個例子,假設明文信息是 「hello」,然後使用一個key來對它加密,比如說這個key是 "2jd8932kd8"。加密後,「hello」 會變成 「X5xJCSycg14=」,看起來就很像隨機的垃圾數據,但如果使用正確的key解密,我們就可以再次得到 「hello」。
公鑰密碼學對未接觸過的人來說看起來很復雜,不過幸運的是,一位作者 Panayotis Vryonis 想到了一個類比的辦法可以大致地說明這個流程。
想像一下,有一個箱子,Bob和Alice兩個人需要用它來秘密地傳遞文件。為了安全起見,他們給箱子配上了一把鎖,這把鎖有兩種狀態:上鎖態和解鎖態。如果箱子被鎖上了,任何一個有這把鑰匙或者鑰匙復製品的人都可以解鎖這個箱子,反之亦然。當Bob鎖住了這個箱子,然後把箱子交給Alice的時候,他是知道Alice有一把復制鑰匙,所以是能夠打開這個箱子的。這就是本質上的 對稱加密 了:一個key既可以用來加密也可以用來解密,同時交互的兩方使用的是同一個key。
現在,繼續想像一下,不一樣的是,這次Bob給箱子安了一個特製的鎖,這把鎖有三種狀態:
另外,不同的是,這把鎖需要用到兩把不同的鑰匙:
這意味著如果箱子被鎖上了,同時鎖孔被轉到了A的位置,那就意味著只能用2號鑰匙來解鎖這個箱子了(往右轉到中間位置解鎖)。類似的,如果箱子被鎖上了,同時鎖孔轉動到了C位置,那就只能用1號鑰匙來解鎖這個箱子了(往左轉到中間位置解鎖)。
換句話說,1號 2號鑰匙都能鎖住這個箱子,但是一旦被鎖住,只能使用另一把來解鎖箱子。
現在,Bob 復制了一批 2號鑰匙,並把它們分給了所有他認識的和想要這把鑰匙的人 ——— 這就是 公鑰 了,Bob自己則保留著唯一的一把1號鑰匙 ——— 這就是他的 私鑰 了。
這樣做究竟意味著什麼?
到這里,我們把箱子換成明文密碼,把鑰匙換成密碼學的公私鑰,這就是公鑰加密/非對稱加密的工作流程和原理了。私鑰加密的信息,只有公鑰的擁有者可以解密,同時,公鑰加密的數據,只有私鑰的擁有者可以解密。這樣,任何人都可以安全的把數據發送給私鑰的擁有者,同時任何人都可以驗證信息來源是私鑰的擁有者而不是其他模仿者。
公鑰加密/非對稱加密對互聯網的安全交互是非常有用的(通過HTTPS)。一個網站的 SSL/TLS 證書,就是公開出去的公鑰,同時私鑰是保存在來源伺服器上的 —— 它是被網站所「擁有」的。
TLS 握手就是使用非對稱加密來驗證來源伺服器的身份的,同時交換了必要的數據,來生成Sessiong Key。比如RSA 或者 Diffie-Hellman 演算法就是使用了非對稱加密的公私鑰對來交換數據得到 Session Key,握手結束後,Session Key就會被當作對稱加密的密鑰來進行溝通。每一次會話,客戶端與服務端都認同並接受新的session key,這樣居心叵測的人 —— 哪怕他識別或者盜竊了其中一條session key,也不能夠解密所有的交互數據( 木:「這是非常經典的非對稱加密和對稱加密混合使用的例子。」 )。
這是一篇簡單翻譯的針對非對稱加密的技術文,分享出來的主要原因就是文中對於公私鑰加解密的舉例非常巧妙,適合新人「掃盲」。希望大家有所收獲。
原文鏈接: https://www.cloudflare.com/learning/ssl/how-does-public-key-encryption-work/
⑤ 我用了別的登陸器,那個私鑰和公鑰是什麼意思
公鑰和私鑰 1,公鑰和私鑰成對出現 2,公開的密鑰叫公鑰,只有自己知道的叫私鑰 3,用公鑰加密的數據只有對應的私鑰可以解密 4,用私鑰加密的數據只有對應的公鑰可以解密 5,如果可以用公鑰解密,則必然是對應的私鑰加的密 6,如果可以用私鑰解密,則必然是對應的公鑰加的密 假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴你們,然後我告訴大家,1是我的公鑰。 我有一個文件,不能讓別人看,我就用1加密了。別人找到了這個文件,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用數字2,就是我的私鑰,來解密。這樣我就可以保護數據了。 我的好朋友x用我的公鑰1加密了字元a,加密後成了b,放在網上。別人偷到了這個文件,但是別人解不開,因為別人不知道2就是我的私鑰,只有我才能解密,解密後就得到a。這樣,我們就可以傳送加密的數據了。 現在我們知道用公鑰加密,然後用私鑰來解密,就可以解決安全傳輸的問題了。如果我用私鑰加密一段數據(當然只有我可以用私鑰加密,因為只有我知道2是我的私鑰),結果所有的人都看到我的內容了,因為他們都知道我的公鑰是1,那麼這種加密有什麼用處呢? 但是我的好朋友x說有人冒充我給他發信。怎麼辦呢?我把我要發的信,內容是c,用我的私鑰2,加密,加密後的內容是d,發給x,再告訴他解密看是不是c。他用我的公鑰1解密,發現果然是c。這個時候,他會想到,能夠用我的公鑰解密的數據,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是我發的東西。這樣我們就能確認發送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微復雜一些。用私鑰來加密數據,用途就是數字簽名。 好,我們復習一下: 1,公鑰私鑰成對出現 2,私鑰只有我知道 3,大家可以用我的公鑰給我發加密的信了 4,大家用我的公鑰解密信的內容,看看能不能解開,能解開,說明是經過我的私鑰加密了,就可以確認確實是我發的了。 總結一下結論: 1,用公鑰加密數據,用私鑰來解密數據 2,用私鑰加密數據(數字簽名),用公鑰來驗證數字簽名。 在實際的使用中,公鑰不會單獨出現,總是以數字證書的方式出現,這樣是為了公鑰的安全性和有效性。 數字證書的原理 數字證書採用公鑰體制,即利用一對互相匹配的密鑰進行加密、解密。每個用戶自己設定一把特定的僅為本人所知的私有密鑰(私鑰),用它進行解密和簽名;同時設定一把公共密鑰(公鑰)並由本人公開,為一組用戶所共享,用於加密和驗證簽名。當發送一份保密文件時,發送方使用接收方的公鑰對數據加密,而接收方則使用自己的私鑰解密,這樣信息就可以安全無誤地到達目的地了。通過數字的手段保證加密過程是一個不可逆過程,即只有用私有密鑰才能解密. 在公開密鑰密碼體制中,常用的一種是RSA體制。 用戶也可以採用自己的私鑰對信息加以處理,由於密鑰僅為本人所有,這樣就產生了別人無法生成的文件,也就形成了數字簽名。採用數字簽名,能夠確認以下兩點: (1)保證信息是由簽名者自己簽名發送的,簽名者不能否認或難以否認; (2)保證信息自簽發後到收到為止未曾作過任何修改,簽發的文件是真實文件。 我的解釋: 每個用戶都有一對私鑰和公鑰。 私鑰用來進行解密和簽名,是給自己用的。 公鑰由本人公開,用於加密和驗證簽名,是給別人用的。 當該用戶發送文件時,用私鑰簽名,別人用他給的公鑰解密,可以保證該信息是由他發送的。即數字簽名。 當該用戶接受文件時,別人用他的公鑰加密,他用私鑰解密,可以保證該信息只能由他接收到。可以避免被其他人看到。 數字證書 是數字形式的標識,與護照或駕駛員執照十分相似。數字證書是數字憑據,它提供有關實體標識的信息以及其他支持信息。數字證書是由成為證書頒發機構(CA)的權威機構頒發的。由於數字證書有證書權威機構頒發,因此由該權威機構擔保證書信息的有效性。此外,數字證書只在特定的時間段內有效。 數字證書包含證書中所標識的實體的公鑰(就是說你的證書里有你的公鑰),由於證書將公鑰與特定的個人匹配,並且該證書的真實性由頒發機構保證(就是說可以讓大家相信你的證書是真的),因此,數字證書為如何找到用戶的公鑰並知道它是否有效這一問題提供了解決方案。 綜上所述,公鑰 私鑰都是保存在數字證書之中的,並不以單獨的文件格式存在.
⑥ 公鑰與私鑰
我也剛學,有這樣一個例子給你看看,很有用:
RSA演算法概述如下:
找兩素數p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一個數e,要求滿足e<t並且e與t互素(就是最大公因數為1)
取d*e%t==1
這樣最終得到三個數: n d e
設消息為數M (M <n)
設c=(M**d)%n就得到了加密後的消息c
設m=(c**e)%n則 m == M,從而完成對c的解密。
註:**表示次方,上面兩式中的d和e可以互換。
在加密中:
n d兩個數構成公鑰,可以告訴別人;
n e兩個數構成私鑰,e自己保留,不讓任何人知道。
給別人發送的信息使用e加密,只要別人能用d解開就證明信息是由你發送的,構成了簽名機制。
別人給你發送信息時使用d加密,這樣只有擁有e的你能夠對其解密
而常用公鑰體制主要有兩個作用:加密信息和認證。由於內容,我把鏈接給你,你參考著看看……挺好理解的
http://hi..com/piao2007/blog/item/ae2ec4f881f73202d8f9fd57.html
⑦ 如何用C語言來使用openssl rsa進行公鑰加密,已有公鑰和明文
1. 本程序使用2048位密鑰對,每次加密時,原始數據的最大長度為245位元組,加密後的密文長度為256位元組.(採用打PADDING 的加密方式)
2. 如果所加密數據長度大於245位元組,請分多次加密,後將密文按順序存儲;解密時,每次讀取256位元組,進行解密,將解密後的數據依次按順序存儲,即可還原原始數據.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#define OPENSSLKEY "test.key"
#define PUBLICKEY "test_pub.key"
#define BUFFSIZE 1024
char *my_encrypt(char *str, char *path_key); //加密
char *my_decrypt(char *str, char *path_key); //解密
int main(void)
{
char *source = "i like dancing !!!";
char *ptf_en, *ptf_de;
printf("source is :%s\n", source);
//1.加密
ptf_en = my_encrypt(source, PUBLICKEY);
if (ptf_en == NULL){
return 0;
}else{
printf("ptf_en is :%s\n", ptf_en);
}
//2.解密
ptf_de = my_decrypt(ptf_en, OPENSSLKEY);
if (ptf_de == NULL){
return 0;
}else{
printf("ptf_de is :%s\n", ptf_de);
}
if(ptf_en) free(ptf_en);
if(ptf_de) free(ptf_de);
return 0;
}
//加密
char *my_encrypt(char *str, char *path_key)
{
char *p_en = NULL;
RSA *p_rsa = NULL;
FILE *file = NULL;
int lenth = 0; //flen為源文件長度, rsa_len為秘鑰長度
//1.打開秘鑰文件
if((file = fopen(path_key, "rb")) == NULL)
{
perror("fopen() error 111111111 ");
goto End;
}
//2.從公鑰中獲取 加密的秘鑰
if((p_rsa = PEM_read_RSA_PUBKEY(file, NULL,NULL,NULL )) == NULL)
{
ERR_print_errors_fp(stdout);
goto End;
}
lenth = strlen(str);
p_en = (char *)malloc(256);
if(!p_en)
{
perror("malloc() error 2222222222");
goto End;
}
memset(p_en, 0, 256);
//5.對內容進行加密
if(RSA_public_encrypt(lenth, (unsigned char*)str, (unsigned char*)p_en, p_rsa, RSA_PKCS1_PADDING) < 0)
{
perror("RSA_public_encrypt() error 2222222222");
goto End;
}
End:
//6.釋放秘鑰空間, 關閉文件
if(p_rsa) RSA_free(p_rsa);
if(file) fclose(file);
return p_en;
}
//解密
char *my_decrypt(char *str, char *path_key)
{
char *p_de = NULL;
RSA *p_rsa = NULL;
FILE *file = NULL;
//1.打開秘鑰文件
file = fopen(path_key, "rb");
if(!file)
{
perror("fopen() error 22222222222");
goto End;
}
//2.從私鑰中獲取 解密的秘鑰
if((p_rsa = PEM_read_RSAPrivateKey(file, NULL,NULL,NULL )) == NULL)
{
ERR_print_errors_fp(stdout);
goto End;
}
p_de = (char *)malloc(245);
if(!p_de)
{
perror("malloc() error ");
goto End;
}
memset(p_de, 0, 245);
//5.對內容進行加密
if(RSA_private_decrypt(256, (unsigned char*)str, (unsigned char*)p_de, p_rsa, RSA_PKCS1_PADDING) < 0)
{
perror("RSA_public_encrypt() error ");
goto End;
}
End:
//6.釋放秘鑰空間, 關閉文件
if(p_rsa) RSA_free(p_rsa);
if(file) fclose(file);
return p_de;
}
⑧ 公匙、私匙、數字簽名的作用分別是什麼
一、公鑰加密
假設一下,我找了兩串數字,一串是1*,一串是2*。我喜歡2*這串數字,就保留起來,不告訴你們(私鑰),然後我告訴大家,1*是我的公鑰。
我有一個文件,不能讓別人看,我就用1*加密了。別人找到了這個文件,但是他不知道2*就是解密的私鑰啊,所以他解不開,只有我可以用
串2*,就是我的私鑰,來解密。這樣我就可以保護數據了。
我的好朋友x用我的公鑰1*加密了字元a,加密後成了b,放在網上。別人偷到了這個文件,但是別人解不開,因為別人不知道2*就是我的私鑰,
只有我才能解密,解密後就得到a。這樣,我們就可以傳送加密的數據了。
二、私鑰簽名
如果我用私鑰加密一段數據(當然只有我可以用私鑰加密,因為只有我知道2*是我的私鑰),結果所有的人都看到我的內容了,因為他們都知
道我的公鑰是1*,那麼這種加密有什麼用處呢?
但是我的好朋友x說有人冒充我給他發信。怎麼辦呢?我把我要發的信,內容是c,用我的私鑰2*,加密,加密後的內容是d,發給x,再告訴他
解密看是不是c。他用我的公鑰1*解密,發現果然是c。
這個時候,他會想到,能夠用我的公鑰解密的數據,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是我發的東西。
這樣我們就能確認發送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微復雜一些。用私鑰來加密數據,用途就是數字簽名。
總結:公鑰和私鑰是成對的,它們互相解密。
公鑰加密,私鑰解密。
私鑰數字簽名,公鑰驗證。
⑨ objective-c上的加密數據與RSA公鑰不給予預期結果怎麼解決
1、用公鑰加密,用私鑰解密。2、給別人發信息,就從伺服器上拉下來別人的公鑰,加密後發給他。3、對方拿到信息後用自己的私鑰解密。4、這樣,公鑰加密後除了私鑰持有人,別人都看不到信息。5、若是用私鑰加密,那麼公鑰都能解密,還有何安全性可言?6、私鑰加密的場合只有一個,那就是數字簽名,用來表明這個信息來源於你。
⑩ 公鑰密碼體制和私鑰密碼體制各有什麼優缺點
常用密鑰,加密解密用同一個Key,安全性,防偽性,鑒權性都不好。
公鑰私鑰解決了以上的問題。