色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript aes pkcs7

錢瀠龍1年前8瀏覽0評論

——JavaScript AES PKCS7——

隨著信息的快速傳輸,數據安全越來越成為互聯網的一個重要問題。針對這個問題,AES加密算法被廣泛使用,并且PKCS7填充方式被作為其標準填充方式。JavaScript是一種廣泛使用的編程語言,本文將介紹如何使用JavaScript進行AES加密,并使用PKCS7填充方式來補全數據塊。

開始前,我們需要使用第三方庫crypto-js。這個庫支持多種加密算法,包括AES加密算法??梢酝ㄟ^以下兩個CDN引入(根據需要選擇版本):

<!--下面CDN引入的是AES-CBC模式-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/core.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/aes.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/pad-pkcs7.js"></script>
<!--下面CDN引入的是AES-ECB模式-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/core.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/aes.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/pad-zero.js"></script>

在引入庫之后,我們可以使用以下代碼來加密和解密數據:

// 使用AES-CBC加密算法
var key = CryptoJS.enc.Utf8.parse("1234567812345678"); // key長度為16位或者32位
var iv = CryptoJS.enc.Utf8.parse("1234567812345678"); // 偏移量長度為16位
var encrypted = CryptoJS.AES.encrypt(message, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 使用AES-ECB加密算法
var key = CryptoJS.enc.Utf8.parse("1234567812345678"); // key長度為16位或者32位
var encrypted = CryptoJS.AES.encrypt(message, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding
});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding
});

我們可以通過調用encrypted.toString()和decrypted.toString()方法來獲取加密和解密結果。需要注意的是,使用AES-CBC加密算法需要提供偏移量,并且偏移量長度必須為16位;而使用AES-ECB加密算法則不需要提供偏移量。

在使用AES加密算法的過程中,如果傳入的數據不是AES加密算法支持的數據塊長度(128位、192位或256位),則需要使用填充方式(padding)來補全每個數據塊的長度。在PKCS7填充方式中,每個需要補全的數據塊將被添加到末尾,末尾的元素表示末尾需要補全的數據塊大小。假設我們需要補全一個16字節的數據塊,則需要補全16-(data.length%16)個字節。以下是使用PKCS7填充方式的代碼示例:

function pkcs7padding(message) {
var paddingsize = 16 - (message.length % 16);
if (paddingsize == 0)
paddingsize = 16;
var paddingchar = String.fromCharCode(paddingsize);
var padding = "";
for (var i = 0; i< paddingsize; i++) {
padding += paddingchar;
}
return message + padding;
}
function pkcs7unpadding(message) {
var paddingchar = message[message.length - 1];
var paddingsize = paddingchar.charCodeAt(0);
var padding = "";
for (var i = 0; i< paddingsize; i++) {
padding += paddingchar;
}
return message.slice(0, message.length - paddingsize);
}
var key = CryptoJS.enc.Utf8.parse("1234567812345678");
var iv = CryptoJS.enc.Utf8.parse("1234567812345678");
var message = pkcs7padding("Hello World!");
var encrypted = CryptoJS.AES.encrypt(message, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.NoPadding // 禁用庫提供的pad方式,使用自定義的padding方式
});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.NoPadding // 禁用庫提供的pad方式,使用自定義的padding方式
});
var origin_message = pkcs7unpadding(decrypted.toString(CryptoJS.enc.Utf8));
console.log(encrypted.toString()); // 輸出 fBj1SiQOGew6TZCqj/es7w==
console.log(origin_message); // 輸出 Hello World!

以上代碼中禁用了庫提供的padding方式,使用自定義的padding方式,pkcs7padding()函數用于對數據進行補全操作,而pkcs7unpadding()函數用于對已補全的數據進行還原操作。

在進行加密和解密數據時,需要確保參數和加密模式等方面正確對應。使用以上的方式,我們可以很方便地在JavaScript中實現AES PKCS7加密。

——JavaScript AES PKCS7——