加密
加密有兩種目的:
簽名
只需要加密后的密文,用來做驗證,確保提供的原始文本在傳遞或者保存過程中沒有被修改過,但是原始的明文文本是什么它不關心或者沒有隱藏的必要。這在現(xiàn)實中用途很廣泛,比如老板說“明天放假一天”,這條文本本身沒有加密的必要,但是需要確保的是內(nèi)容沒有被修改,一天不會被改成兩天。
實現(xiàn)這一目的的加密算法,一般是使用被稱為單向散列函數(shù)加密的算法,但也有使用非對稱加密的算法,比如DSA。
解密
加密后的密文,需要可以被解密成明文。這是我們一般意義上的加密的目的,在傳遞或者保存中,第三方看不到原始的明文文本,不知道內(nèi)容是什么。
實現(xiàn)這一目的的加密算法有兩種:對稱加密和非對稱加密。
比較
哈希要達到的效果是:不能由密文推導出明文;而解密要達到的效果是:沒有密碼或者密鑰,不能推導出明文。
算法
加密算法可以分成三個種類:單向散列函數(shù)加密、對稱加密和非對稱加密。第一種一般用來處理簽名和消息驗證,后面兩種一般用來進行加密解密,但這不是絕對的區(qū)分。
單向散列函數(shù)加密
哈希:散列,又稱為雜湊,哈希,其實都是英文 hash 的翻譯。散列函數(shù)又被稱為散列算法。最常用的是以下兩種算法:
- MD5(Message-Digest Algorithm,即信息摘要算法),由MD2、MD3、MD4改進而來。
- SHA(Secure Hash Algorithm,即安全散列算法),包含SHA-0,SHA-1,SHA-2(SHA-224、SHA-256、SHA-512等)和SHA-3(SHA3-224、SHA3-256和SHA3-512等)。
對稱加密
對稱加密,是指加密和解密使用相同的密鑰。最常用的有以下兩種算法。
- DES(Data Encryption Standard,即數(shù)據(jù)加密標準)和 3DES(即三重數(shù)據(jù)加密算法)
- AES(Advanced Encryption Standard,即高級加密標準)
非對稱加密
非對稱加密,是指加密和解密使用的是兩個不相同的密鑰。通常這兩個密鑰其中一個是公開的,所以這一加密方法也被稱為公開密鑰加密。
- RSA(三個人名的首字母),它的核心是質(zhì)因數(shù)分解。這個算法可以用來對文本進行加密和解密。
- DSA(Digital Signature Algorithm,即數(shù)字簽名算法),它的核心是模算數(shù)和離散對數(shù)問題。它僅用于簽名而不能用戶解密。算法中使用的散列函數(shù)是SHA家族。
實際實現(xiàn)中還有使用 ECC(Elliptic Curve Cryptography,即橢圓曲線密碼學)的ECDSA等算法,是ECC和DSA的結合。
證書
X.509是密碼學里公鑰證書的格式標準。
X.509證書里含有公鑰、身份信息(比如網(wǎng)絡主機名,組織的名稱或個體名稱等)和簽名信息,還附帶了證書吊銷列表和用于從最終對證書進行簽名的證書簽發(fā)機構直到最終可信點為止的證書合法性驗證算法。
格式標準
格式標準用于指定保存證書或者是公鑰和密鑰的容器格式。
- DER(Distinguished Encoding Rules,即唯一編碼規(guī)則),是一種二進制格式。
- PEM(Privacy-Enhanced Mail,即隱私增強型郵件),是一種被編碼成base64的文本格式。
- PKCS(Public Key Cryptography Standards,即公鑰加密標準),這是有RSA信息安全公司制定的一系列公開密鑰密碼編譯標準。包含
PKCS#1~PKCS#15