加密演算法分類
1、對稱加密演算法
1.1 說明
對稱加密演算法中,發信方利用加密金鑰和特定的加密演算法將明文運算處理,生成加密密文傳送出去。
收信方收到密文後,使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,得到可讀明文。
在對稱加密演算法中,加密和解密使用同一個金鑰。
基於“對稱金鑰”的加密演算法主要有DES、AES、TripleDES、RC2、RC4、RC5和Blowfish等。
1.2 DES加密演算法
DES加密演算法是一種分組密碼,以64位為分組對資料加密,它的金鑰長度是56位,另外8位校驗,加密解密用同一演算法。
DES加密演算法是對金鑰進行保密,公開演算法,包括加密和解密演算法。
相對而言,計算量小、加密速度快、效率高;但是隨著計算機系統能力的不斷髮展,DES的安全性不高,適用於普通資料加密。
1.3 AES加密演算法
AES加密演算法是密碼學中的高階加密標準,採用對稱分組密碼體制,金鑰長度的最少支援為128、192、256,分組長度128位。這種加密演算法是美國聯邦政府採用的區塊加密標準,這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。
安全性比DES要高。
2、非對稱加密演算法
2.1 說明
非對稱加密演算法有兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。
公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。\
非對稱加密中使用的主要演算法有:RSA、Elgamal、揹包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)等。
2.2 非對稱加密應用描述
- A和B各自產生一對公鑰和私鑰。
- A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。
- A要給B傳送資訊時,A用B的公鑰加密資訊,生成密文,密文只有B的私鑰才能解密。
- A將密文發給B。
- B收到這個訊息後,B用自己的私鑰解密A的訊息。其他人因為沒有B的私鑰無法解密。
2.3 ECC加密演算法
ECC(Elliptic Curve Cryptosystems )橢圓曲線密碼體制,美國SUN公司開發的,它的體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。2000年10月,國際密碼學界在德國ESSEN召開了學術大會(ECC2000),在這次會議上,來自世界各國的密碼學家、數學家證明了對ECC演算法的最快破解效率是高於亞指數級的,而RSA演算法的最快破解效率是亞指數級的。ECC2000的召開進一步從學術上奠定了ECC演算法的安全性,極大的推動了它在世界各國的應用。
2.4 RSA加密演算法
RSA加密演算法是目前最有影響力的公鑰加密演算法,並且被普遍認為是目前最優秀的公鑰方案之一。RSA是第一個能同時用於加密和數宇簽名的演算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰資料加密標準。RSA加密演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。
具體可見:https://blog.csdn.net/qq_30062125/article/details/84298706
3、訊息摘要演算法
3.1 說明
訊息摘要演算法的加密過程不需要金鑰,並且經過加密的資料無法被解密,目前可以被解密逆向的只有CRC32演算法,只有輸入相同的明文資料經過相同的訊息摘要演算法才能得到相同的密文。
訊息摘要演算法不存在金鑰的管理與分發問題,適合於分散式網路上使用。
幾乎所有的數字簽名方案都要和快速高效的摘要演算法(Hash函式)一起使用,當公鑰演算法與摘要演算法結合起來使用時,便構成了一種有效地數字簽名方案。
這個過程是:首先用摘要演算法對訊息進行摘要,然後在把摘要值用信源的私鑰加密;
接收方先把接收的明文用同樣的摘要演算法摘要,形成“準籤體”,然後再把準籤體與用信源的公鑰解密出的“籤體”進行比較,如果相同就認為訊息是完整的,否則訊息不完整。
這種方法使公鑰加密只對訊息摘要進行操作,因為一種摘要演算法的摘要訊息長度是固定的,而且都比較“短”(相對於訊息而言),正好符合公鑰加密的要求。
這樣效率得到了提高,而其安全性也並未因為使用摘要演算法而減弱。
Hash演算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
3.2 MD5加密演算法
MD5為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護。
對MD5加密演算法簡要的敘述可以為:MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成—個128位雜湊值。
MD5被廣泛用於各種軟體的密碼認證和鑰匙識別上。MD5用的是雜湊函式,它的典型應用是對一段資訊產生資訊摘要,以防止被篡改。MD5的典型應用是對一段Message產生fingerprin指紋,以防止被“篡改”。如果再有—個第三方的認證機構,用MD5還可以防止檔案作者的“抵賴”,這就是所謂的數字簽名應用。MD5還廣泛用於作業系統的登陸認證上,如UNIX、各類BSD系統登入密碼、數字簽名等諸多方。
MD5用法說明
[[email protected] ~]# md5sum --help
用法:md5sum [選項]... [檔案]...
顯示或檢查 MD5(128-bit) 校驗和。
若沒有檔案選項,或者檔案處為"-",則從標準輸入讀取。
-b, --binary 以二進位制模式讀取
-c, --check 從檔案中讀取MD5 的校驗值並予以檢查
--tag create a BSD-style checksum
-t, --text 以純文字模式讀取(預設)
Note: There is no difference between binary and text mode option on GNU system.
The following four options are useful only when verifying checksums:
--quiet don't print OK for each successfully verified file
--status don't output anything, status code shows success
--strict exit non-zero for improperly formatted checksum lines
-w, --warn warn about improperly formatted checksum lines
--help 顯示此幫助資訊並退出
--version 顯示版本資訊並退出
# 檢視單個檔案md5
[[email protected] ~]# md5sum x-pack-core-6.4.0.jar
d65b4d7412665c37a54b56c99c5c4c4e x-pack-core-6.4.0.jar
# 批量校驗
[[email protected] ~]# md5sum x-pack-core-6.4.0.jar Atlas-2.2.1.el6.x86_64.rpm > md5.info
[[email protected] ~]# cat md5.info
d65b4d7412665c37a54b56c99c5c4c4e x-pack-core-6.4.0.jar
380fee1cea3b17042eaa92b487e883c7 Atlas-2.2.1.el6.x86_64.rpm
[[email protected] ~]# md5sum -c md5.info
x-pack-core-6.4.0.jar: 確定
Atlas-2.2.1.el6.x86_64.rpm: 確定
3.3 SHA1加密演算法
SHA1是和MD5一樣流行的訊息摘要演算法。SHA加密演算法模仿MD4加密演算法。SHA1設計為和數字簽名演算法(DSA)一起使用。
SHA1主要適用於數字簽名標準裡面定義的數字簽名演算法。對於長度小於2^64位的訊息,SHA1會產生一個160位的訊息摘要。當接收到訊息的時候,這個訊息摘要可以用來驗證資料的完整性。在傳輸的過程中,資料很可能會發生變化,那麼這時候就會產生不同的訊息摘要。SHA1不可以從訊息摘要中復原資訊,而兩個不同的訊息不會產生同樣的訊息摘要。這樣,SHA1就可以驗證資料的完整性,所以說SHA1是為了保證檔案完整性的技術。
SHA1加密演算法可以採用不超過264位的資料輸入,併產生一個160位的摘要。輸入被劃分為512位的塊,並單獨處理。160位緩衝器用來儲存雜湊函式的中間和最後結果。緩衝器可以由5個32位暫存器(A、B、C、D和E)來表示。
SHA1是一種比MD5的安全性強的演算法。
sha1sum用法說明
[[email protected] ~]# sha1sum --help
用法:sha1sum [選項]... [檔案]...
顯示或檢查 SHA1(160-bit) 校驗和。
若沒有檔案選項,或者檔案處為"-",則從標準輸入讀取。
-b, --binary 以二進位制模式讀取
-c, --check 從檔案中讀取SHA1 的校驗值並予以檢查
--tag create a BSD-style checksum
-t, --text 以純文字模式讀取(預設)
Note: There is no difference between binary and text mode option on GNU system.
The following four options are useful only when verifying checksums:
--quiet don't print OK for each successfully verified file
--status don't output anything, status code shows success
--strict exit non-zero for improperly formatted checksum lines
-w, --warn warn about improperly formatted checksum lines
--help 顯示此幫助資訊並退出
--version 顯示版本資訊並退出
# 檢視sha1
[[email protected] ~]# sha1sum x-pack-core-6.4.0.jar
f59aff19965dc219ece465a4658eead632a0d8b7 x-pack-core-6.4.0.jar
4、Base64編碼說明
Base64加密演算法是網路上最常見的用於傳輸8bit位元組程式碼的編碼方式之一,Base64編碼可用於在HTTP環境下傳遞較長的標識資訊。
例如,在JAVAPERSISTENCE系統HIBEMATE中,採用了Base64來將一個較長的唯一識別符號編碼為一個字串,用作HTTP表單和HTTPGETURL中的引數。
在其他應用程式中,也常常需要把二進位制資料編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的資料不會被人用肉眼所直接看到。
[[email protected] ~]# echo -n test | base64
dGVzdA==
5、小結
在實際的操作過程中,我們通常採用的方式是:採用非對稱加密演算法管理對稱演算法的金鑰,然後用對稱加密演算法加密資料,
既實現了加密速度快的優點,又實現了安全方便管理金鑰的優點。
一般來說,金鑰越長,執行的速度就越慢,應該根據的我們實際需要的安全級別來選擇,一般來說,RSA建議採用1024位的數字,2048位安全性一般相當可靠了,ECC建議採用160位,AES採用128位。