【安全加密技術】非對稱加密
轉載請註明出處:http://blog.csdn.net/sk719887916/article/details/46810595
看過上篇網路互聯基系列基礎的朋友,對安全產生的原因以及策略度有所瞭解,當然作為開發者來講,網路傳輸中的安全問題我們不必過多的關心,我們關心的是傳送方加密和接收方對資料的解密過程,也就是網路安全中的一面邊緣學科,密碼學中的一種資料加密技術,目前業界的加密方式主要有對稱加密和非堆成加密,那就先來了解下有非對稱加密以及所關聯的相關名字。
非對稱加密
非對稱加密演算法是一種金鑰的加密方法。
非對稱加密演算法需要兩個金鑰:公鑰(publickey)和私鑰(privatekey)。公鑰與私鑰是一對存在,如果用公鑰對資料進行加密,只有用對應的私鑰才能解密;如果用金鑰對資料進行加密,那麼只有用對應的公鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。 非對稱加密演算法實現機密資訊交換的基本過程是:甲方生成一對金鑰並將其中的一把作為公用金鑰向其它方公開;得到該公用金鑰的乙方使用該金鑰對機密資訊進行加密後再發送給甲方;甲方再用自己儲存的另一把專用金鑰對加密後的資訊進行解密。
另一方面,甲方可以使用乙方的公鑰對機密資訊進行簽名後再發送給乙方;乙方再用自己的私匙對資料進行驗籤。
甲方只能用其專用金鑰解密由其公用金鑰加密後的任何資訊。 非對稱加密演算法的保密性比較好,它消除了終端使用者交換金鑰的需要。
非對稱密碼體制的特點:演算法強度複雜、安全性依賴於演算法與金鑰但是由於其演算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種金鑰,並且是非公開的,如果要解密就得讓對方知道金鑰。所以保證其安全性就是保證金鑰的安全,而非對稱金鑰體制有兩種金鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的金鑰了。這樣安全性就大了很多。
列如 :支付寶的加密方式就採用非對稱加密方式,支付寶會給客戶提供支付寶證書,作為使用者驗證是否是來自支付寶的資料,防止第三方假冒支付寶,而客戶手中持有私鑰,使用者支付寶傳送的資料經過支付寶的公鑰進項加密,則支付寶可以採用自己的的私鑰進行解密。
工作過程
1.A要向B傳送資訊,A和B都要產生一對用於加密
2.A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。
3.A要給B傳送資訊時,A用B的公鑰加密資訊,因為A知道B的公鑰。
4.A將這個資料發給B(已經用B的公鑰加密訊息)。
5.B收到這個資料後後,B用自己的私鑰解密A的訊息。其他所有收到這個報文的人都無法解密,因為只有B才有B的私鑰。
通俗點可以這麼理解:
瀏覽器向伺服器發出請求,詢問對方支援的對稱加密演算法和非對稱加密演算法;伺服器迴應自己支援的演算法。
瀏覽器選擇雙方都支援的加密演算法,並請求伺服器出示自己的證書;伺服器迴應自己的證書。
瀏覽器隨機產生一個用於本次會話的對稱加密的鑰匙,並使用伺服器證書中附帶的公鑰對該鑰匙進行加密後傳遞給伺服器;伺服器為本次會話保持
該對稱加密的鑰匙。第三方不知道伺服器的私鑰,即使截獲了資料也無法解密。非對稱加密讓任何瀏覽器都可以與伺服器進行加密會話。
瀏覽器使用對稱加密的鑰匙對請求訊息加密後傳送給伺服器,伺服器使用該對稱加密的鑰匙進行解密;伺服器使用對稱加密的鑰匙對響應訊息加密後傳送給瀏覽器,瀏覽器使用該對稱加密的鑰匙進行解密。第三方不知道對稱加密的鑰匙,即使截獲了資料也無法解密。對稱加密提高了加密速度
非對稱加密(公鑰加密):指加密和解密使用不同金鑰的加密演算法,也稱為公私鑰加密。假設兩個使用者要加密交換資料,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。如果企業中有n個使用者,企業需要生成n對金鑰,並分發n個公鑰。由於公鑰是可以公開的,使用者只要保管好自己的私鑰即可,因此加密金鑰的分發將變得 十分簡單。同時,由於每個使用者的私鑰是唯一的,其他使用者除了可以通過資訊傳送者的公鑰來驗證資訊的來源是否真實,還可以確保傳送者無法否認曾傳送過該資訊。非對稱加密的缺點是加解密速度要遠遠慢於對稱加密,在某些極端情況下,甚至能比對稱加密慢上1000倍。
DSACryptoServiceProvider
RSACryptoServiceProvider
//加密
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] PasswordBytes = encoding.GetBytes(password);//將密碼轉換為位元組陣列
RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//RSA加密演算法
PasswordBytes=crypt.Encrypt(password ,false);//加密位元組陣列,這是加密後的密碼值,放入資料庫中的表字段中。
string key=crypt.ToXmlString(true);//輸出金鑰為XML格式的字串,且包含私鑰,這個字串要作為資料庫表中的一個欄位同用戶的密碼放在一起
//解密
RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//已隨機生成了一個金鑰對
crypt.Clear();//毀掉當前金鑰對
crypt.FromXmlString(key)//輸入金鑰對,key是從資料庫表字段中讀取的那個XML格式的字串,即金鑰欄位
PasswordBytes=crypt.Decrypt(password ,false);//解密位元組陣列,返回原始密碼給使用者
上面方法的一個特點是每個使用者對應一個金鑰(包含公鑰和私鑰),它們都是隨機生成的,所以各不相同。不過缺點也是很明顯的,就是金鑰儲存在資料庫中,如果資料庫被攻破金鑰就洩漏了。還有另外一個方法就是依照上面方法隨機生成一個金鑰對(包含公鑰和私鑰),通過ToXmlString(true)方法匯出,然後把這個XML字串格式的金鑰放到你的Web程式的Web.config檔案的AppSetting節點裡面,然後通過FromXmlString(key)方法讀入金鑰,這樣就意味著所有的使用者密碼都用同一個金鑰對加密和解密。 非對稱的好處顯而易見,非對稱加密體系不要求通訊雙方事先傳遞金鑰或有任何約定就能完成保密通訊,並且金鑰管理方便,可實現防止假冒和抵賴,因此,更適合網路通訊中的保密通訊要求。
數字證書
數字證書就是網際網路通訊中標誌通訊各方身份資訊的一串數字,提供了一種在Internet上驗證通訊實體身份的方式,數字證書不是數字身份證,而是身份認證機構蓋在數字身份證上的一個章或印(或者說加在數字身份證上的一個簽名)。它是由權威機構——CA機構,又稱為證書授權(Certificate Authority)中心發行的,人們可以在網上用它來識別對方的身份。 數字證書綁定了公鑰及其持有者的真實身份,它類似於現實生活中的居民身份證,所不同的是數字證書不再是紙質的證照,而是一段含有證書持有者身份資訊並經過認證中心稽核簽發的電子資料,廣泛用在電子商務和移動網際網路中。。通俗講就是車管所會給每個車輛進行認證頒發車牌,通過車牌我們可以查到所有車輛和駕駛員的信,二數字證書就辨別唯一身份,支付寶等的數字證書就是公開的,這不是支付寶自己決定,而是由國際組織認證,這樣不管是哪個使用者首先就可以根據瀏覽器返回的證書辨別支付寶的真偽。
數字簽名
數字簽名用來,保證資訊傳輸的完整性、傳送者的身份認證、防止交易中的抵賴發生。數字簽名是將摘要資訊用傳送者的私鑰加密,與原文一起傳送給接收者。接收者只有用傳送者的公鑰才能解密被加密的摘要資訊,然後用HASH函式對收到的原文產生一個摘要資訊,與解密的摘要資訊對比。如果相同,則說明收到的資訊是完整的,在傳輸過程中沒有被修改,否則說明資訊被修改過,因此數字簽名能夠驗證資訊的完整性。如果中途資料被纂改或者丟失。那麼對方就可以根據數字簽名來辨別是否是來自對方的第一手資訊資料。
數字簽名是個加密的過程,數字簽名驗證是個解密的過程。
加密演算法
DES(Data Encryption Standard):對稱演算法,資料加密標準,速度較快,適用於加密大量資料的場合; 3DES(Triple DES):是基於DES的對稱演算法,對一塊資料用三個不同的金鑰進行三次加密,強度更高;RC2和RC4:對稱演算法,用變長金鑰對大量資料進行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際資料加密演算法,使用 128 位金鑰提供非常強的安全性;
RSA:由 RSA 公司發明,是一個支援變長金鑰的公共金鑰演算法,需要加密的檔案塊的長度也是可變的,非對稱演算法; 演算法如下:
首先, 找出三個數, p, q, r,其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數......p, q, r 這三個數便是 private key
接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1).....這個 m 一定存在, 因為 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了.....
再來, 計算 n = pq.......
m, n 這兩個數便是 public key
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標準),嚴格來說不算加密演算法; AES(Advanced Encryption Standard):高階加密標準,對稱演算法,是下一代的加密演算法標準,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael 演算法; BLOWFISH,它使用變長的金鑰,長度可達448位,執行速度很快;
MD5:嚴格來說不算加密演算法,只能說是摘要演算法;
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值。在MD5演算法中,首先需要對資訊進行填充,使其位元組長度對512求餘的結果等於448。因此,資訊的位元組長度(Bits Length)將被擴充套件至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在資訊的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對資訊的填充。然後,在這個結果後面附加一個以64位二進位制表示的填充前資訊長度。經過這兩步的處理,如今資訊位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對資訊長度的要求。
PKCS:The Public-Key Cryptography Standards (PKCS)是由美國RSA資料安全公司及其合作伙伴制定的一組公鑰密碼學標準,其中包括證書申請、證書更新、證書作廢表釋出、擴充套件證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。
SSF33,SSF28,SCB2(SM1):國家密碼局的隱蔽不公開的商用演算法,在國內民用和商用的,除這些都不容許使用外,其他的都可以使用; 還包括Elgamal、揹包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
用的最多的是RSA演算法,Elgamal是另一種常用的非對稱加密演算法。
Elgamal其基礎是DiffieˉHellman金鑰交換演算法,後者使通訊雙方能通過公開通訊來推匯出只有他們知道的祕密金鑰值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman於1976年發明的,被視為第一種 非對稱加密演算法,DiffieˉHellman 與RSA的不同之處在於,DiffieˉHellman不是加密演算法,它只是生成可用作對稱金鑰的祕密數值。在DiffieˉHellman金鑰交換過程中,傳送方和接收方分別生成一個祕密的隨機數,並根據隨機數推匯出公開值,然後,雙方再交換公開值。DiffieˉHellman演算法的基礎是具備生成共享金鑰的能力。只要交換了公開值,雙方就能使用自己的私有數和對方的公開值來生成對稱金鑰,稱為共享金鑰,對雙方來說,該對稱金鑰是相同的,可以用於使用對稱加密演算法加密資料。
與RSA相比,DiffieˉHellman的優勢之一是每次交換金鑰時都使用一組新值,而使用RSA演算法時,如果攻擊者獲得了私鑰,那麼他不僅能解密之前截獲的訊息,還能解密之後的所有訊息。然而,RSA可以通過認證(如使用X.509數字證書)來防止中間人攻擊,但Diff ieˉHellman在應對中間人攻擊時非常脆弱。
完整的非對稱加密過程
假如現在 你向支付寶 轉賬(術語資料資訊),為了保證資訊傳送的保密性、真實性、完整性和不可否認性,需要對傳送的資訊進行數字加密和簽名,其傳送過程為: 1.首先你要確認是否是支付寶的數字證書,如果確認為支付寶身份後,則對方真實可信。可以向對方傳送資訊, 2.你準備好要傳送的數字資訊(明文)計算要轉的多少錢,對方支付寶賬號等;3.你 對數字資訊進行雜湊運算,得到一個資訊摘要(客戶端主要職責);
4.你 用自己的私鑰對資訊摘要進行加密得到 你 的數字簽名,並將其附在數字資訊上;
5.你 隨機產生一個加密金鑰,並用此密碼對要傳送的資訊進行加密(密文);
6.你用 支付寶的公鑰對剛才隨機產生的加密金鑰進行加密,將加密後的 DES 金鑰連同密文一起傳送給支付寶; 7.支付寶收到 你 傳送來的密文和加密過的 DES 金鑰,先用自己的私鑰對加密的 DES 金鑰進行解密,得到 你隨機產生的加密金鑰;
8.支付寶 然後用隨機金鑰對收到的密文進行解密,得到明文的數字資訊,然後將隨機金鑰拋棄;
9.支付寶 用你 的公鑰對 你的的數字簽名進行解密,得到資訊摘要;
10.支付寶用相同的雜湊演算法對收到的明文再進行一次雜湊運算,得到一個新的資訊摘要;
11.支付寶將收到的資訊摘要和新產生的資訊摘要進行比較,如果一致,說明收到的資訊沒有被修改過。
12 確定收到資訊,然後進行向對方進行付款交易,一次非對稱密過程結束。在這後面的流程就不屬於本次非對稱加密的範疇,算支付寶個人的自我流程,也就是迴圈以上過程。 今天給帶來的程式資料加密技術中的非對稱加密,下篇繼續對稱加密技術。謝謝閱讀,
相關推薦
【安全加密技術】非對稱加密
轉載請註明出處:http://blog.csdn.net/sk719887916/article/details/46810595 看過上篇網路互聯基系列基礎的朋友,對安全產生的原因以及策略度有所瞭解,當然作為開發者來講,網路傳輸中的安全問題我們不必過多的關
應用加密一;非對稱加密演算法揭祕
非對稱加密演算法 使用過程: 乙方生成兩把金鑰(公鑰和私鑰) 甲方獲取乙方的公鑰,然後用它對資訊加密。 乙方得到加密後的資訊,用私鑰解密,乙方也可用私鑰加密字串 甲方獲取乙方私鑰加密資料,用公鑰解密 優點: 更安全,金鑰越長,它就越難破解 缺點: 加密速度慢
應用加密一;非對稱加密算法揭秘
問題: nature 就是 個數 公鑰私鑰 公鑰加密 時也 abi 官方 非對稱加密算法 使用過程: 乙方生成兩把密鑰(公鑰和私鑰) 甲方獲取乙方的公鑰,然後用它對信息加密。 乙方得到加密後的信息,用私鑰解密,乙方也可用私鑰加密字符串 甲方獲取乙方私鑰加密數
Java加密解密之非對稱加密
非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個祕鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)。使用公鑰加密的,要使用私鑰解密。反之,使用私鑰加密的,要使用公鑰解密。 和對稱加密的區別是: 對稱加密:加密和解密時使用的是
整理的AES對稱加密和RSA非對稱加密
專案用到這兩個加密方法,就整理了下做了個demo,這裡也貼出來程式碼供參考 AES加密解密 public class AESUtil { /** * 生成AES金鑰 * @param strkey * @return * @t
對稱加密與非對稱加密理解和非對稱加密的java例子
package com.zl.test3; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.FileReader;
(1)java自帶軟體包javax.crypto的使用方法,對稱加密方法和非對稱加密方法
一般來講,在java上實現加密解密演算法,有3種方式。 1)自行實現演算法 2)使用java自帶的crypto軟體包 3)使用第三方庫 本文講述一下第二種使用方法。我最開始也是找了很多這方面的資料,但是總感覺還是缺乏一些細節。現將我的一些心得與大家分享。 本文給出的例子
[加密]--PHP 使用非對稱加密演算法(RSA)
解釋 非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。 公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密; 如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。 因為加密和
對稱加密演算法和非對稱加密演算法的完美結合
第一 對稱加密: 對稱加密是指,加密方和解密方使用同樣的祕鑰來進行加密和解密。在對稱加密演算法中,資料發信方將明文(原始資料)和加密金鑰(mi yue)一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。常用的對稱加密演算法:AES,RC4,3DES
【上】安全HTTPS-全面詳解對稱加密,非對稱加密,數字簽名,數字證書和HTTPS
此文章轉載來源於http://blog.csdn.net/tenfyguo/article/details/40922813點選開啟連結 一,對稱加密 所謂對稱加密,就是它們在編碼時使用的金鑰e和解碼時一樣d(e=d),我們就將其統稱為金鑰k。 對稱加解密的過
【下】安全HTTPS-全面詳解對稱加密,非對稱加密,數字簽名,數字證書和HTTPS
此文章轉載來源於http://blog.csdn.net/tenfyguo/article/details/40958727點選開啟連結 1. HTTPS 1.1. 什麼是HTTPS HTTPS(HypertextTransfer Protocol Secur
【IoT】加密與安全:非對稱加密演算法 ECC 公私鑰 DER 編碼示例解析
加密演算法的公私鑰一般使用 ASN.1 標準的 DER 編碼格式,本文先介紹 ASN.1( ASN.1 基礎) 相關的基礎知識,最後給出 ECC 公鑰 DER 格式的示例便於更好理解 DER 編碼。 1、ASN.1 簡介 ASN.1( Abstract Syntax No
【IoT】加密與安全:非對稱加密演算法 RSA 1024 公鑰、祕鑰、明文和密文長度
RSA 1024 是指公鑰及私鑰分別是 1024bit,也就是 1024/8 = 128Bytes。 RSA 演算法金鑰長度的選擇是安全性和程式效能平衡的結果,金鑰長度越長,安全性越好,加密解密所需時間越長。 1、非對稱加密演算法中 1024bit 金鑰的強度相當於對稱加
RSA 非對稱加密【轉】
omx javax 生成 lba 測試 data htm dog ash 演示代碼:https://pan.baidu.com/s/10rfSUUDEEHvCDEYH0oEVCw Base64工具類,可以讓rsa編碼的亂碼變成一串字符序列 1 pack
對 【對稱加密和非對稱加密以及CA】的理解(二)
非對稱加密更加安全但是費時費力,對稱加密雖然省時,快速但是不安全,於是就可以將它倆結合起來使用。 結合思路是這樣的:檔案傳輸用對稱加密,對稱加密的加密和解密用的都是同一個金鑰,用非對稱加密的公鑰對此對稱加密的金鑰進行加密,然後傳送出去,接收方用非對稱加密的私鑰對剛才用公鑰加密過的對稱加密的金鑰進
對 【對稱加密和非對稱加密以及CA】的理解(一)
最近申請了阿里雲的伺服器,進入了一個新的領域,當然一開始也是懵逼狀態,處於雲裡霧裡,決定將自己學習的計算機網路的相關知識複習一下。 對稱加密:即通訊雙方在對傳輸的檔案進行加密和解密時候,所用的是同一個金鑰。 優點:速度快,對稱性加密通常在訊息傳送方需要加密大量資料時使用,演算法公開、計算量小
【智慧合約學習筆記】關於非對稱加密的公鑰、私鑰和加解密~
學習了非對稱加密,其中對於公鑰和私鑰在加解密中的角色,還是有些不理解,於是找了點資料,加深下理解。 關於非對稱加解密,私鑰和公鑰到底是誰來加密,誰來解密? 第一種用法:公鑰加密,私鑰解密。---用於加解密 第二種用法:私鑰簽名,公鑰驗籤。---用於簽名 有點混亂
【安全技術】Java 實現加密資料庫連線
一、前言在很多專案中,資料庫相關的配置檔案內容都是以明文的形式展示的,這存在一定的安全隱患。在開發和維護專案時,不僅要關注專案的效能,同時也要注重其安全性。二、實現思路我們都知道專案啟動時,Spring 容器會載入配置檔案並讀取檔案中的內容,那麼我們可以下邊步驟操作:1) 通
SpringCloud-分散式配置中心【加密-非對稱加密】
案例程式碼:https://github.com/q279583842q/springcloud-e-book 非對稱加密 一、什麼是非對稱加密(Asymmetric encryption) 二、Java-keytool 使用說明 非對稱加密我們需要生成對應的公鑰和私鑰,jdk中提供的有java-
非對稱加密技術- RSA算法數學原理分析
這樣的 另一個 href 使用 兩個 對稱 基礎 大於 深入淺出 非對稱加密技術,在現在網絡中,有非常廣泛應用。加密技術更是數字貨幣的基礎。 所謂非對稱,就是指該算法需要一對密鑰,使用其中一個(公鑰)加密,則需要用另一個(私鑰)才能解密。 但是對於其原理大部分同學應該都是一