目錄
常用術(shù)語:
加密:encryption 解密:decryption
秘鑰:secret key (公鑰:public key 私鑰:private key)
數(shù)字簽名:digital signature
數(shù)字證書:digital certificate
摘要:digest
可以參考的文章:What is a Digital Signature? (翻譯:數(shù)字簽名是什么?)
Base64也不是加密解密算法,只能算是一個(gè)編碼算法,通常用于把二進(jìn)制數(shù)據(jù)編碼為可寫的字符形式的數(shù)據(jù),對數(shù)據(jù)內(nèi)容進(jìn)行編碼來適合傳輸(可以對img圖像編碼用于傳輸)。這是一種可逆的編碼方式。
更多Base64相關(guān)知識(shí)可參考博客:base64
這64個(gè)字符為:
a-z(26個(gè))、A-Z(26個(gè))、0-9(10個(gè))、 和 / (2個(gè)),共64個(gè)。
常見的散列算法有MD5、SHA1、HMAC。散列算法并不是加密算法。
密碼通常用md5算法加密,雖然不能通過逆向的方式恢復(fù)成明文,但是卻可以通過碰撞的方式得到原密碼或者替代密碼。
(簡單具體例子,假設(shè)密碼是數(shù)字2,而hash算法是對原數(shù)字進(jìn)行平方運(yùn)算,2的平方為4,實(shí)際上我們不需要也不可能通過逆向得到原密碼2,但只需要找到其替代值-2就足以。)
md5加鹽
鹽,是一串比較復(fù)雜的字符串。加鹽的目的是加強(qiáng)加密的復(fù)雜度,當(dāng)然這個(gè)“鹽”越長越復(fù)雜,加密后破解起來就越麻煩。加鹽并不表示就安全了,“鹽”也可能被泄漏出去。
另外,加鹽也不一定加固定的鹽。
SHA-1密碼算法,由美國專門制定密碼算法的標(biāo)準(zhǔn)機(jī)構(gòu)———美國國家標(biāo)準(zhǔn)技術(shù)研究院與美國國家安全局設(shè)計(jì),早在1994年就被推薦給美國政府和金融系統(tǒng)采用,是美國政府目前應(yīng)用最廣泛的密碼算法。
散列消息鑒別碼,基于密鑰的Hash算法的認(rèn)證協(xié)議。
補(bǔ)充:王小云和她的研究小組已經(jīng)宣布,成功破解MD5和SHA-1等加密算法。實(shí)際上并不是真正意義上的破解,只是提高了碰撞效率。
對稱加密就是通信雙方使用相同的秘鑰加密解密。
對稱加密算法有DES、3DES(TripleDES),DESede、AES、Blowfish,以及RC2和RC4算法,還有其他第三方提供的軟件包提供的Bouncy Castle 提供的IDEA算法。
這里面DES算是最經(jīng)典的算法,DESede是DES算法的變種,AES算是DES算法的替代者;
AES(Advanced Encryption Standard)
AES翻譯過來是高級加密標(biāo)準(zhǔn),它是用來替代之前的DES加密算法的。但是因?yàn)锳ES加密算法的安全性要高于DES和3DES,所以AES已經(jīng)成為了主要的對稱加密算法。
更多對稱加密算法的知識(shí)可參考博客:對稱加密及AES加密算法
非對稱加密使用一對密鑰:公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰則可以發(fā)給任何請求它的人。
公鑰和私鑰是成對出現(xiàn)的,它們可以互相解密。公鑰加密的內(nèi)容,只有私鑰可以解密。私鑰加密的內(nèi)容,只有公鑰可以解密。
(公鑰加密私鑰解,私鑰簽名公鑰驗(yàn)證。 )
主要的非對稱加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。
使用最廣泛的是RSA算法,Elgamal是另一種常用的非對稱加密算法
截取一段內(nèi)容,來自對稱加密及AES加密算法
非對稱加密算法的效率是非常低的。
將內(nèi)容使用hash函數(shù)生成摘要,再用私鑰對摘要進(jìn)行加密,生成數(shù)字簽名。然后將內(nèi)容附上數(shù)字簽名一同傳輸。
收件方收到后,用公鑰對數(shù)字簽名進(jìn)行解密,得到摘要,然后再對原內(nèi)容進(jìn)行hash生成摘要,比對這兩個(gè)摘要是否相同,相同則說明內(nèi)容沒有被篡改。
由CA頒發(fā)給網(wǎng)站的身份證書,里面包含了該網(wǎng)站的公鑰,有效時(shí)間,網(wǎng)站的地址,CA的數(shù)字簽名等。
所謂的CA數(shù)字簽名,實(shí)際上就是使用了CA的私鑰將網(wǎng)站的公鑰等信息進(jìn)行了簽名,當(dāng)客戶端請求服務(wù)器的時(shí)候,網(wǎng)站會(huì)把證書發(fā)給客戶端,客戶端首先可以通過CA的數(shù)字簽名校驗(yàn)CA的身份,也能證明證書的真實(shí)完整性。客戶端有沒有可能到一個(gè)假冒的CA去校驗(yàn)數(shù)字證書呢?不太可能,因?yàn)镃A的地址是內(nèi)嵌在瀏覽器中的,很難被篡改。
keytool和openssl都是證書管理工具。openssl和keytool的區(qū)別可以參考數(shù)字證書管理工具openssl和keytool的區(qū)別
keytool是Java自帶的數(shù)字證書管理工具,用于數(shù)字證書的生成,導(dǎo)入,導(dǎo)出與撤銷等操作。它與本地密鑰庫關(guān)聯(lián),并可以對本地密鑰庫進(jìn)行管理,可以將私鑰存放于密鑰庫中,而公鑰使用數(shù)字證書進(jìn)行輸出。keytool位于jdk安裝目錄的bin文件夾下。
openssl官網(wǎng)地址:https://www.openssl.org/
待補(bǔ)充:使用keytool和openssl生成自簽名證書步驟
總結(jié):
對稱加密與解密使用的是相同的密鑰,所以速度快,但由于需要將密鑰在網(wǎng)絡(luò)傳輸,所以安全性不高。
非對稱加密使用了一對密鑰:公鑰與私鑰,所以安全性高,但加密與解密速度慢。
通常的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進(jìn)行加密,然后發(fā)送出去,接收方使用私鑰進(jìn)行解密得到對稱加密的密鑰,然后雙方仍然可以使用對稱加密來進(jìn)行溝通。
聯(lián)系客服