前端crypto-js aes加解密

CryptoJS是javascrpit強(qiáng)大的加密解密庫,要實現(xiàn)加解密,云側(cè)和端側(cè)的加密方式需要一一對應(yīng)珠叔。例如蝎宇,云側(cè)采用AES/CBC/PKCS5Padding加密,前端CryptoJS也要采用aes的CBC/PKCS5Padding方式加密祷安。

具體以下5項要和云側(cè)保持一致:

  1. Key
  2. IV姥芥,偏移量
  3. Mode,加密模式汇鞭,有CBC凉唐、ECB等
  4. Padding,補(bǔ)齊模式霍骄,Pkcs7等台囱。加密串按照一定的大小進(jìn)行分組,最后分剩下那一組读整,不夠長度玄坦,就需要進(jìn)行補(bǔ)齊,這個屬性代表了以何種方式補(bǔ)齊
  5. 加密串編碼格式绘沉,通過CryptoJS.AES.encrypt方法加密完成后煎楣,要和云側(cè)約定以何種方式對加密串編碼后傳給云側(cè),例如车伞,不編碼直接傳择懂,base64,hex等等另玖,我們項目采用base64, 所以最終調(diào)用CryptoJS.enc.Base64.stringify(encrypted.ciphertext)導(dǎo)出困曙。

以下為加密函數(shù)的調(diào)用實現(xiàn):

import CryptoJS from "crypto-js";

const key = CryptoJS.enc.Utf8.parse("$$ysdfsdfsdfbj"); 
const iv = CryptoJS.enc.Utf8.parse("dYsdfgssdfgsddfgo");
export default {
  //aes加密
  aesEncrypt(word) {
    let encrypted = "";
    if (typeof word == "string") {
      const srcs = CryptoJS.enc.Utf8.parse(word);
      //模式為CBC,補(bǔ)碼方式為PKCS5Padding(也就是PKCS7)
      encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      });
    } else if (typeof word == "object") {
      const data = JSON.stringify(word);
      const srcs = CryptoJS.enc.Utf8.parse(data);
      //模式為CBC谦去,補(bǔ)碼方式為PKCS5Padding(也就是PKCS7)
      encrypted = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      });
    }
    //編碼導(dǎo)出
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
  },
  // aes解密
  aesDecrypt(word) {
    const encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    const decrypt = CryptoJS.AES.decrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
  }
};

參考:

AES/CBC/PKCS5Padding 到底是什么

https://xie.infoq.cn/article/7e93850ddb9a6170bd49cd28c</wiz-editor-doc>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慷丽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鳄哭,更是在濱河造成了極大的恐慌要糊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妆丘,死亡現(xiàn)場離奇詭異锄俄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)勺拣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門奶赠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人药有,你說我怎么就攤上這事毅戈。” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵苇经,是天一觀的道長赘理。 經(jīng)常有香客問我,道長塑陵,這世上最難降的妖魔是什么感憾? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任蜡励,我火速辦了婚禮令花,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凉倚。我一直安慰自己兼都,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布稽寒。 她就那樣靜靜地躺著扮碧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杏糙。 梳的紋絲不亂的頭發(fā)上慎王,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音宏侍,去河邊找鬼赖淤。 笑死,一個胖子當(dāng)著我的面吹牛谅河,可吹牛的內(nèi)容都是我干的咱旱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绷耍,長吁一口氣:“原來是場噩夢啊……” “哼吐限!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褂始,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诸典,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后崎苗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搂赋,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年益缠,在試婚紗的時候發(fā)現(xiàn)自己被綠了脑奠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡幅慌,死狀恐怖宋欺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤齿诞,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布酸休,位于F島的核電站,受9級特大地震影響祷杈,放射性物質(zhì)發(fā)生泄漏斑司。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一但汞、第九天 我趴在偏房一處隱蔽的房頂上張望宿刮。 院中可真熱鬧,春花似錦私蕾、人聲如沸僵缺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕潮。三九已至,卻和暖如春容贝,著一層夾襖步出監(jiān)牢的瞬間自脯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工斤富, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留膏潮,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓茂缚,卻偏偏與公主長得像戏罢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脚囊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容