摘要:最近遇到的幾個(gè)網(wǎng)站在提交密碼時(shí)提交的已經(jīng)是密文,也就是說(shuō)在網(wǎng)絡(luò)上傳輸?shù)拿艽a是密文,這樣提升了密碼在網(wǎng)絡(luò)傳輸中的安全性。今天一起來(lái)了解一下基于的前后端加解密流程。由于是塊加密,銘文被分割成固定長(zhǎng)度的塊一般是字節(jié)長(zhǎng)度,所以也是字節(jié)。
最近遇到的幾個(gè)網(wǎng)站在提交密碼時(shí)提交的已經(jīng)是密文,也就是說(shuō)在網(wǎng)絡(luò)上傳輸?shù)拿艽a是密文,這樣提升了密碼在網(wǎng)絡(luò)傳輸中的安全性。
后端語(yǔ)言加解密已經(jīng)有很成熟的方案了,前端的話Google之前出過(guò)一個(gè)crypto-js,為瀏覽器的js提供了加解密方案。今天一起來(lái)了解一下基于AES的前后端加解密流程。
Javascript安裝npm包 npm install crypto-js
加密代碼
const CryptoJS = require("crypto-js"); const key = CryptoJS.enc.Latin1.parse("1234567812345678"); const iv = CryptoJS.enc.Latin1.parse("1234567812345678"); const encoded = CryptoJS.AES.encrypt("hahaha", key, { iv: iv, mode: CryptoJS.mode.CBC, adding: CryptoJS.pad.ZeroPadding }).toString() console.log("encoded", encoded)
解密代碼
const key = CryptoJS.enc.Latin1.parse("123456781234567812345678"); const iv = CryptoJS.enc.Latin1.parse("1234567812345678"); const decoded = CryptoJS.AES.decrypt(encoded, key, { iv: iv, mode: CryptoJS.mode.CBC, adding: CryptoJS.pad.ZeroPadding }).toString(CryptoJS.enc.Utf8) console.log("decoded", decoded);
輸出如下
encoded 6bcgYd4f4ZgNOQH/3tqMpg== decoded hahahaPHP
直接使用openssl解密即可,代碼如下:
$encoded = "6bcgYd4f4ZgNOQH/3tqMpg=="; $key = "123456781234567812345678"; $iv = "1234567812345678"; var_dump(openssl_decrypt($encoded, "AES-192-CBC", $key, 0,$iv));
輸出結(jié)果:
string(6) "hahaha"
注意事項(xiàng)
AES加密位數(shù)跟密鑰key有關(guān), 以下是密鑰位數(shù)和加密對(duì)應(yīng)關(guān)系
16 => AES-128
24 => AES-192
32 => AES-256
iv是初始化向量. 超過(guò)16字節(jié)或者不足16字節(jié)都會(huì)被補(bǔ)足16字節(jié)或者截?cái)嗟?6字節(jié)。由于AES是塊加密,銘文被分割成固定長(zhǎng)度的塊(一般是16字節(jié)長(zhǎng)度),所以iv也是16字節(jié)。
CBC是加密模式
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/105550.html
摘要:下文中我們將分別使用和來(lái)實(shí)現(xiàn)加解密,二者同步加解密的要點(diǎn)為使用何種填充算法。下面我們給出填充算法的實(shí)現(xiàn)填充算法移去填充算法默認(rèn)使用自動(dòng)對(duì)待加密數(shù)據(jù)進(jìn)行填充以對(duì)齊加密算法數(shù)據(jù)塊長(zhǎng)度。需固定使用,并通過(guò)調(diào)整的長(zhǎng)度,來(lái)實(shí)現(xiàn)加密算法。 對(duì)稱加解密算法中,當(dāng)前最為安全的是 AES 加密算法(以前應(yīng)該是是 DES 加密算法),PHP 提供了兩個(gè)可以用于 AES 加密算法的函數(shù)簇:Mcrypt 和 ...
摘要:擴(kuò)展已經(jīng)過(guò)時(shí)了大約年,并且用起來(lái)很復(fù)雜。因此它被廢棄并且被所取代。從起它將被從核心代碼中移除并且移到中。手冊(cè)在遷移頁(yè)面給出了替代方案就是用取代加密,支持加密要加密的數(shù)據(jù)加密加密后的數(shù)據(jù)解密要解密的數(shù)據(jù)加密解密后的數(shù)據(jù)可據(jù)需求,自行改編。 mcrypt 擴(kuò)展已經(jīng)過(guò)時(shí)了大約10年,并且用起來(lái)很復(fù)雜。因此它被廢棄并且被 OpenSSL 所取代。 從PHP 7.2起它將被從核心代碼中移除并且移...
摘要:非對(duì)稱加密與對(duì)稱加密相對(duì)的是非對(duì)稱加密,非對(duì)稱加密的核心思想是使用一對(duì)相對(duì)的密匙,分為公匙和私匙,私匙自己安全保存,而將公匙公開(kāi)。 引言 互聯(lián)網(wǎng)的發(fā)展史上,安全性一直是開(kāi)發(fā)者們相當(dāng)重視的一個(gè)主題,為了實(shí)現(xiàn)數(shù)據(jù)傳輸安全,我們需要保證:數(shù)據(jù)來(lái)源(非偽造請(qǐng)求)、數(shù)據(jù)完整性(沒(méi)有被人修改過(guò))、數(shù)據(jù)私密性(密文,無(wú)法直接讀?。┑?。雖然現(xiàn)在已經(jīng)有SSL/TLS協(xié)議實(shí)現(xiàn)的HTTPS協(xié)議,但是因在客戶...
摘要:密鑰長(zhǎng)度是位,超過(guò)位數(shù)密鑰被忽略??缯Z(yǔ)言做加密解密經(jīng)常會(huì)出現(xiàn)問(wèn)題,往往是填充方式不對(duì)編碼不一致或者加密解密模式?jīng)]有對(duì)應(yīng)上造成。是為了兼容用加密的結(jié)果。 最近在對(duì)接客戶的CRM系統(tǒng),獲取令牌時(shí),要用DES方式加密解密,由于之前沒(méi)有搞錯(cuò)這種加密方式,經(jīng)過(guò)請(qǐng)教了百度和谷歌兩個(gè)老師后,結(jié)合了多篇文檔內(nèi)容后,終于實(shí)現(xiàn)了。 一、DES介紹 DES 是對(duì)稱性加密里面常見(jiàn)一種,全稱為 Data Enc...
摘要:?jiǎn)栴}描述最近在開(kāi)發(fā)微信小程序涉及到加密數(shù)據(jù)的解密用的是代碼在運(yùn)行后報(bào)錯(cuò)提示方法已過(guò)時(shí)了經(jīng)研究得知是版本引起的可以使用方法代替解密首先要知道微信方使用的是加密的所以我們采用也應(yīng)該對(duì)應(yīng)對(duì)密文進(jìn)行解密需要解密的密文解密的初始向量解密得到的明文 問(wèn)題描述 最近在開(kāi)發(fā)微信小程序涉及到加密數(shù)據(jù)(encryptedData)的解密,用的是PHP代碼,在運(yùn)行后報(bào)錯(cuò)mcrypt_module_ xxx ...
閱讀 2792·2021-11-17 17:01
閱讀 2177·2021-09-28 09:35
閱讀 3689·2021-09-01 11:04
閱讀 996·2020-06-22 14:41
閱讀 3038·2019-08-30 15:55
閱讀 2683·2019-08-30 15:43
閱讀 2398·2019-08-26 13:54
閱讀 2567·2019-08-26 13:48