常見的七種加密算法 以及實(shí)現(xiàn)
數(shù)字簽名、信息加密是前后端開發(fā)經(jīng)常使用到的技術(shù),應(yīng)用場(chǎng)景包括了用戶登入、交易、信息通訊、oauth等等。不同應(yīng)用場(chǎng)景可能需要搭配不同的應(yīng)用算法來(lái)實(shí)現(xiàn)。
數(shù)字簽名
數(shù)字簽名,通過(guò)可鑒別的數(shù)字信息驗(yàn)證 自身身份的一種方式,可以理解為現(xiàn)實(shí)生活當(dāng)中身份證的身份證號(hào)碼。
一套數(shù)字簽名通常定義兩種互補(bǔ)的運(yùn)算,一個(gè)用于簽名,另一個(gè)用于驗(yàn)證。發(fā)送者持有私鑰,接收者持有私鑰對(duì)應(yīng)的公鑰。能夠在接受到來(lái)自發(fā)送者信息時(shí)用于驗(yàn)證其身份。
加密和解密
- 加密
- 數(shù)據(jù)加密的基本過(guò)程,就是對(duì)原來(lái)為明文的文件或按照某種算法進(jìn)行處理,讓其成為不可讀的一段代碼,通常稱為密文。用于保護(hù)數(shù)據(jù)不被人獲取,竊取。
- 解密
- 加密的逆過(guò)程為解密,即將該編碼信息轉(zhuǎn)化為其原來(lái)數(shù)據(jù)的過(guò)程
對(duì)稱加密和非對(duì)稱加密
加密算法份對(duì)稱加密和非對(duì)稱加密,其中對(duì)稱加密的算法與解密密鑰相同,非對(duì)稱加密算法的加密密鑰與解密密鑰不同,此外還有一類不需要密鑰的散列算法。
常見的對(duì)稱加密算法主要有
DES3DESAES等,常見的非堆成算法主要有RSADSA等,散列算法主要有SHA-1MD5等對(duì)稱加密
對(duì)稱加密算法時(shí)應(yīng)用較早的加密算法,又稱為共享密鑰加密算法。在對(duì)稱加密算法中,使用的密鑰只有一個(gè),發(fā)送和接送雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。
數(shù)據(jù)加密過(guò)程:在對(duì)稱加密算法中,數(shù)據(jù)發(fā)送將銘文和加密密鑰一起經(jīng)過(guò)特殊加密處理,生成復(fù)雜的加密密文進(jìn)行發(fā)送
數(shù)據(jù)解密過(guò)程:數(shù)據(jù)接收方收到密文后,若相等讀取原數(shù)據(jù),則需要使用加密密鑰及相同的逆算法進(jìn)行解密,恢復(fù)成明文
非對(duì)稱加密
非對(duì)稱加密算法(公開密鑰加密算法),它需要2個(gè)密鑰,一個(gè)public Key,一個(gè)private Key。因?yàn)榧用芎徒饷苁褂玫氖?個(gè)不通的密鑰,所以這種算法稱為非對(duì)稱加密算法。
- 如果公鑰對(duì)數(shù)據(jù)進(jìn)行加密。只有對(duì)應(yīng)的私鑰才能進(jìn)行解密
- 如果使用私鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有對(duì)應(yīng)的公鑰才能進(jìn)行解密。
比如A用戶生成了一對(duì)密鑰,然后把公鑰公開給B 。B使用公鑰加密發(fā)送給A。A再使用自己保存的私鑰去解密。
常見的簽名加密算法
MD5算法
MD5用的是hash函數(shù),它的典型應(yīng)用是對(duì)一段信息摘要,以防止被篡改,嚴(yán)格來(lái)說(shuō),MD5不是一種加密算法,而是摘要算法,無(wú)論多長(zhǎng)的輸入,MD5都會(huì)輸出長(zhǎng)度為32個(gè)字符的一個(gè)字符串。
//采用MD5加密算法 MessageDigest md = MessageDigest.getInstance("MD5"); //加密 byte[] digest = md.digest("123456".getBytes());SHA1算法
SHA1是和M5一樣的消息摘要算法,然而SHA1比MD5的安全性更強(qiáng)。
//采用MD5加密算法 MessageDigest md = MessageDigest.getInstance("SHA1");HMAC算法
HMAC是密鑰相關(guān)的哈希運(yùn)算消息認(rèn)證碼,HMAC運(yùn)算利用哈希算法,以一個(gè)密鑰和一個(gè)消息未輸入,生成一個(gè)消息摘要作為輸出。
HMAC在多線程環(huán)境下是不安全的。如果需要在多線程訪問的時(shí)候,進(jìn)行同步的輔助類,使用ThreadLocal為每個(gè)線程緩存一個(gè)實(shí)例可以避免進(jìn)行鎖操作。
AES/DES/3DES算法
AES\DES\3DES都是對(duì)稱的塊加密算法發(fā),加解密的過(guò)程是可逆的,常用的有AES128/AES192/AES256。
DES算法
DES加密算法是一種分組密碼,以64位分組對(duì)數(shù)據(jù)加密,它的密鑰長(zhǎng)度是56位,加密解密用同一算法。DES加密算法是對(duì)密鑰進(jìn)行保密,而公開算法,包括加密和解密算法。
3DES算法
基于DES的堆成算法,對(duì)一塊數(shù)據(jù)用三個(gè)不同的密鑰進(jìn)行三次加密,強(qiáng)度更高。
AES加密算法
AES 加密算法是密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn),該加密算法采用分組密碼體制,密鑰長(zhǎng)度最少支持位128、192、256,分組長(zhǎng)度128位,算法應(yīng)易于各種硬件和軟件實(shí)現(xiàn)。
AES 本身就是為了取代DES。AES具有更好的安全性,效率和靈活性RSA算法
RSA加密算法是目前最有影響力的公鑰加密算法,并且被普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA是第一個(gè)同時(shí)用于加密和數(shù)字簽名的算法。它能夠抵抗到目前為止已知 的所有密碼攻擊。
ECC算法
ECC也是一種非對(duì)稱加密算法,主要優(yōu)勢(shì)是在某些情況下,它比其他的方法使用更下的密鑰,比如RSA加密算法,提供相當(dāng)或更高等級(jí)的安全級(jí)別。不過(guò)一個(gè)缺點(diǎn)是加密和解密操作的實(shí)現(xiàn)比其他機(jī)制時(shí)間長(zhǎng)。(CPU消耗嚴(yán)重)
對(duì)稱算法
密鑰管理:比較難,不適合互聯(lián)網(wǎng),一般用于內(nèi)部系統(tǒng)。
安全性:中
加密速度:快好幾個(gè)數(shù)量級(jí) (軟件加解密速度至少快100倍,每秒可以加解密數(shù)M比特數(shù)據(jù)),適合大數(shù)據(jù)量的加解密處理。非對(duì)稱算法
密鑰管理:密鑰容易管理。
安全性:高
加密速度:比較慢,適合 小數(shù)據(jù)量加解密或數(shù)據(jù)簽名。