常見(jiàn)的七種加密算法 以及實(shí)現(xiàn)
數(shù)字簽名禽炬、信息加密是前后端開(kāi)發(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ì)稱加密算法的加密密鑰與解密密鑰不同,此外還有一類不需要密鑰的散列算法俄认。
常見(jiàn)的對(duì)稱加密算法主要有
DES
3DES
AES
等个少,常見(jiàn)的非堆成算法主要有RSA
DSA
等,散列算法主要有SHA-1
MD5
等對(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ì)稱加密算法(公開(kāi)密鑰加密算法)荤傲,它需要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ì)密鑰榜贴,然后把公鑰公開(kāi)給B 。B使用公鑰加密發(fā)送給A妹田。A再使用自己保存的私鑰去解密唬党。
常見(jiàn)的簽名加密算法
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)境下是不安全的毕泌。如果需要在多線程訪問(wè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)行保密,而公開(kāi)算法崎脉,包括加密和解密算法拧咳。
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ù)簽名。