前端aes解密實戰小結

2022-08-30 14:06:17 字數 2021 閱讀 3885

很多人對於aes加密並不是很了解,導致互相之間進行加密解密困難。 

本文用簡單的方式來介紹aes在使用上需要的知識,而不涉及內部演算法。最後給出例子來幫助理解aes加密解密的使用方法。

相比於其他加密,aes加密似乎模式很多,包括ecb、cbc等等等等,每個模式又包括iv引數和padding引數,並且,不同語言對aes加密的庫設計有區別。這些導致aes加密在不同人之間聯調會很麻煩。

不難理解,對越長的字串進行加密,代價越大,所以通常對明文進行分段,然後對每段明文進行加密,最後再拼成乙個字串。塊加密的乙個要面臨的問題就是如何填滿最後一塊?所以這就是padding的作用,使用各種方式填滿最後一塊字串,所以對於解密端,也需要用同樣的padding來找到最後一塊中的真實資料的長度。

aes分為幾種模式,比如ecb,cbc,cfb等等,這些模式除了ecb由於沒有使用iv而不太安全,其他模式差別並沒有太明顯,大部分的區別在iv和key來計算密文的方法略有區別。具體可參考wiki的說明。 

另外,aes分為aes128,aes256等,表示期待秘鑰的長度,比如aes256秘鑰的長度應該是256/8的32位元組,一些語言的庫會進行自動擷取,讓人以為任何長度的秘鑰都可以。而這其實是有區別的。

iv稱為初始向量,不同的iv加密後的字串是不同的,加密和解密需要相同的iv,既然iv看起來和key一樣,卻還要多乙個iv的目的,對於每個塊來說,key是不變的,但是只有第乙個塊的iv是使用者提供的,其他塊iv都是自動生成。 

iv的長度為16位元組。超過或者不足,可能實現的庫都會進行補齊或截斷。但是由於塊的長度是16位元組,所以一般可以認為需要的iv是16位元組。

aes塊加密說過,padding是用來填充最後一塊使得變成一整塊,所以對於加密解密兩端需要使用同一的padding模式,大部分padding模式為pkcs5, pkcs7, nopadding。

所以,在設計aes加密的時候 

- 對於加密端,應該包括:加密秘鑰長度,秘鑰,iv值,加密模式,padding方式。 

- 對於解密端,應該包括:解密秘鑰長度,秘鑰,iv值,解密模式,padding方式。

這裡我以vue作為例子,其他的也就大同小異了~

其次我們需要定義兩個方法 ,分別是用於加密和解密,這裡我將它放在了utils資料夾下,命名為secret.js,其具體**如下:

const cryptojs = require('crypto-js');  //引用aes原始碼js

const key = cryptojs.enc.utf8.parse("1234123412abcdef"); //十六位十六進製制數作為金鑰

const iv = cryptojs.enc.utf8.parse('abcdef1234123412'); //十六位十六進製制數作為金鑰偏移量

//解密方法

function decrypt(word) );

let decryptedstr = decrypt.tostring(cryptojs.enc.utf8);

return decryptedstr.tostring();

}//加密方法

function encrypt(word) );

return encrypted.ciphertext.tostring().touppercase();

}export default

上面的**中的key是金鑰 ,iv是金鑰偏移量,這個一般是介面返回的,為了方便,我們這裡就直接在這裡定義了。

值得注意的是金鑰的長度,由於對稱解密使用的演算法是aes-128-cbc演算法,資料採用pkcs#7填充 , 因此這裡的key需要為16位!

接著我們定義了解密方法decrypt加密方法encrypt,最後通過export default將其暴露出去,方便在需要的時候進行引入~

前端AES解密

使用外掛程式crypto.js 安裝npm install s e dev crypto js 匯入 crypto js 包 import cryptojs from crypto js crypto js aes 解密 字串 key iv 返回base64 export function decr...

完全掌握加密解密實戰超級手冊

完全掌握加密解密實戰超級手冊 基本資訊 深入內涵,全盤理解,掌握精髓 來自安全技術一線培訓師與程式設計師的經驗之談,從入門到實踐,深入淺出地介 內容簡介 本書緊緊圍繞軟體的加密與解密來進行講解,在詳細講述加密 解密技術的同時 還介紹了相應的實現原理,並配合案例分析,使讀者能夠系統 深入地了解 加密 ...

完全掌握加密解密實戰超級手冊

完全掌握加密解密實戰超級手冊 基本資訊 深入內涵,全盤理解,掌握精髓 來自安全技術一線培訓師與程式設計師的經驗之談,從入門到實踐,深入淺出地介 內容簡介 本書緊緊圍繞軟體的加密與解密來進行講解,在詳細講述加密 解密技術的同時 還介紹了相應的實現原理,並配合案例分析,使讀者能夠系統 深入地了解 加密 ...