數(shù)據(jù)加密一般是為了前后端在數(shù)據(jù)交互過(guò)程中數(shù)據(jù)的安全。常見(jiàn)的做法有前端加密之后傳輸數(shù)據(jù)和啟用HTTPS協(xié)議。現(xiàn)在主要簡(jiǎn)單總結(jié)前端數(shù)據(jù)加密
對(duì)稱(chēng)加密與非對(duì)稱(chēng)加密(可逆)
這兩種是前端數(shù)據(jù)加密的兩種表現(xiàn)形式。所謂的對(duì)稱(chēng)加密就是解密與加密是一套秘鑰,而非對(duì)稱(chēng)加密解密與加密是兩套不同的秘鑰。
前端使用非對(duì)稱(chēng)加密的原理是前端公用一套加密算法,前端使用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,后端使用時(shí)用秘鑰將數(shù)據(jù)解密為明文,中間攻擊人拿到密文,若果沒(méi)有私鑰的話(huà)是沒(méi)辦法破解的。
主要運(yùn)用場(chǎng)景是登錄或者是用戶(hù)的私密信息(如銀行卡項(xiàng)目信息)前端將其加密,并將加密數(shù)據(jù)傳輸給后端,后端用過(guò)秘鑰解密獲取信息。該過(guò)程可防止數(shù)據(jù)在傳輸?shù)倪^(guò)程中被攔截。
因?yàn)榍岸说耐该餍?,使用js進(jìn)行非對(duì)稱(chēng)加密是相對(duì)安全的。對(duì)稱(chēng)加密算法有des, 3des, tdea, aes;非對(duì)稱(chēng)加密算法有rsa,d-h, ecc;
MD5與SHA(不可逆)
MD5與SHA均是哈希算法,哈希算法不是某一種算法,而是特指一類(lèi)算法,哈希算法又叫散列算法,是一種只能加密,不能解密的密碼學(xué)算法。只要符合這類(lèi)算法的特點(diǎn)就屬于哈希算法(就是講任意長(zhǎng)度的輸入轉(zhuǎn)換為固定長(zhǎng)度的輸出)。
其主要原理: 其將明文轉(zhuǎn)換成一段散列值(摘要),將報(bào)文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報(bào)文摘要與發(fā)送方的發(fā)來(lái)報(bào)文摘要解密比較,比較結(jié)果一致表示明文未被改動(dòng),如果不一致表示明文已被篡改。
應(yīng)用場(chǎng)景:用戶(hù)密碼的加密,請(qǐng)求參數(shù)校驗(yàn),文件下載校驗(yàn)
MD5
md5是不可逆的,經(jīng)過(guò)MD5加密的數(shù)據(jù)是不可解密的。
MD5的值不是唯一的,一個(gè)原始數(shù)據(jù)對(duì)應(yīng)一個(gè)MD5值;但是一個(gè)MD5值。可能對(duì)應(yīng)多個(gè)原始數(shù)據(jù)。
MD5的加密原理是哈希算法。
因?yàn)镸D5是不可逆的,所以不存在解密這一說(shuō);md5可以用來(lái)做校驗(yàn),具體來(lái)說(shuō)文件的md5值就像文件的指紋,每個(gè)文件的md5值是不同的,任何人對(duì)文件做了修改,其MD5值也會(huì)改變。
md5的js方法參考:https://github.com/blueimp/JavaScript-MD5
sha-1
sha表示安全哈希算法,sha-1是改算法的一個(gè)版本,其他版本還有sha-2;has-1是160位的哈希值,而has-2是組合值,有 不同的位數(shù),其中最受歡迎的是256位。
sha1與MD5的最大區(qū)別在于其摘要比MD5摘要長(zhǎng)32比特。運(yùn)行速度比MD5慢。
has-1的js方法參考:https://github.com/emn178/js-sha1
base64加密與解密(可逆)
理論上不算加密,這個(gè)只是將文本按照一定的編碼格式從新寫(xiě)一遍,但是可以起到一定的加密作用。這個(gè)更適合叫轉(zhuǎn)碼與解碼。
對(duì)兼容性沒(méi)要求的換可以是用js原生支持的window.btoa()與window.atob()方法進(jìn)行轉(zhuǎn)碼與解碼(js已經(jīng)原生支持base64的轉(zhuǎn)碼與解碼)。
需要注意的是window.btoa()將ascii字符串或二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成一個(gè)base64編碼過(guò)的字符串,該方法不能直接作用于Unicode字符串。因此最后對(duì)傳入該方法中的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼
如果對(duì)兼容是有要求的那么就要使用插件js-base64進(jìn)行處理
相關(guān)知識(shí)點(diǎn)
ASCII編碼,占用0 - 127用來(lái)表示大小寫(xiě)英文字母、數(shù)字和一些符號(hào)。
Unicode字符,Unicode是為了解決傳統(tǒng)的字符編碼方案局限而產(chǎn)生的,它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿(mǎn)足跨語(yǔ)言,跨平臺(tái)進(jìn)行文本轉(zhuǎn)換,處理的要求
參考文檔:http://www.likecs.com/show-30596.html
參考文檔:https://www.cnblogs.com/chenlong-50954265/p/5647056.html