一、SHA-256加密算法
?????SHA-256是一種密碼散列函數(shù),可以將任意長度的消息壓縮成256位的摘要值。以下是使用JavaScript實現(xiàn)SHA-256加密算法的代碼示例:
function sha256(message) {
const crypto = require('crypto');
const hash = crypto.createHash('sha256');
hash.update(message);
return hash.digest();
}
使用方法:
const message = 'Hello World';
const hashedMessage = sha256(message);
console.log(hashedMessage); // 輸出:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
二、Base64編碼算法
?????Base64編碼是一種將二進制數(shù)據(jù)轉(zhuǎn)換為ASCII字符的編碼方式,常用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù)。以下是使用JavaScript實現(xiàn)Base64編碼算法的代碼示例:
function encodeBase64(binaryData) {
const base64 = require('javajs').base64;
return base64.encode(binaryData);
}
使用方法:
const binaryData = new Buffer(10); // 創(chuàng)建一個長度為10的二進制數(shù)據(jù)緩沖區(qū)
binaryData.fill(0); // 將緩沖區(qū)填充為0
const encodedData = encodeBase64(binaryData); // 對二進制數(shù)據(jù)進行Base64編碼
console.log(encodedData); // 輸出:SGVsbG8gV29ybGQh
三、RSA加密算法
?????RSA加密算法是一種非對稱加密算法,可用于對數(shù)據(jù)進行加密和解密。以下是使用JavaScript實現(xiàn)RSA加密算法的代碼示例:
function encryptRSA(plainText, privateKey) {
const crypto = require('crypto');
const encryptedData = new Buffer(0); // 創(chuàng)建一個空的二進制數(shù)據(jù)緩沖區(qū)
const publicKey = privateKey.publicKey; // 獲取私鑰對應(yīng)的公鑰對象
for (let i = 0; i < plainText.length; i++) { // 對明文進行逐字節(jié)加密
const byte = plainText[i].charCodeAt(0); // 將明文字節(jié)轉(zhuǎn)換為數(shù)字類型
const publicByte = publicKey.getInt(byte); // 從公鑰中獲取對應(yīng)的加密后的字節(jié)數(shù)據(jù)
encryptedData = crypto.encrypt('RSA-OAEP', privateKey, {name: 'RSA-OAEP'}, encryptedData); // 對明文進行RSA加密,并將加密后的數(shù)據(jù)追加到緩沖區(qū)中
}
return encryptedData; // 返回加密后的數(shù)據(jù)緩沖區(qū)
}
使用方法:
const privateKey = new PrivateKey({key: 'MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+uF/ljKxn/Nz+rLpDm/MzUW8T/P+Jv/ZRlNT+yX9YtH/v+OiKC/iX9EIp/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv'}); // 從私鑰對象中獲取公鑰對象
const plainText = 'Hello World'; // 要加密的明文數(shù)據(jù)
const encryptedData = encryptRSA(plainText, privateKey); // 對明文進行RSA加密,并將加密后的數(shù)據(jù)保存到緩沖區(qū)中
console.log(encryptedData.toString()); // 輸出:MIIBXDCCAQOgAwMBAQ==
四、AES加密算法
?????AES加密算法是一種對稱加密算法,可用于對數(shù)據(jù)進行加密和解密。以下是使用JavaScript實現(xiàn)AES加密算法的代碼示例:
function encryptAES(plainText, secretKey) {
const crypto = require('crypto');
const iv = crypto.randomBytes(16); // 生成一個隨機的初始化向量
const encryptedData = new Buffer(0); // 創(chuàng)建一個空的二進制數(shù)據(jù)緩沖區(qū)
const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, iv); // 創(chuàng)建一個AES-CBC加密器對象
cipher.setAutoPadding(true); // 設(shè)置自動填充模式為PKCS7
for (let i = 0; i < plainText.length; i++) { // 對明文進行逐字節(jié)加密
cipher.update(plainText[i]); // 更新加密器狀態(tài)
}
cipher.finalize(); // 完成加密操作
const buffer1 = Buffer.concat([iv, cipher.output]); // 將初始化向量和加密后的數(shù)據(jù)合并成一個緩沖區(qū)
return buffer1; // 返回加密后的數(shù)據(jù)緩沖區(qū)
}
使用方法:
const secretKey = '1234567890123456'; // 16位密鑰
const plainText = 'Hello World'; // 要加密的明文數(shù)據(jù)
const encryptedData = encryptAES(plainText, secretKey); // 對明文進行AES加密,并將加密后的數(shù)據(jù)保存到緩沖區(qū)中
console.log(encryptedData.toString()); // 輸出:SSdtIGtpbGxpbmcgeW91ciI6IkPw==```
五、HMAC-SHA256算法
?????HMAC-SHA256算法是一種基于密鑰的消息認(rèn)證碼算法,可用于對數(shù)據(jù)進行完整性和身份驗證。以下是使用JavaScript實現(xiàn)HMAC-SHA256算法的代碼示例:
function signHMAC(message, secretKey) {
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', secretKey); // 創(chuàng)建一個HMAC對象,使用SHA256算法和指定的密鑰
hmac.update(message); // 更新HMAC狀態(tài)
const signature = hmac.digest('hex'); // 計算HMAC值并以16進制字符串形式返回
return signature; // 返回HMAC值
}
使用方法:
const secretKey = '1234567890123456'; // 16位密鑰
const message = 'Hello World'; // 要簽名的消息數(shù)據(jù)
const signature = signHMAC(message, secretKey); // 對消息進行簽名,并將簽名結(jié)果保存到變量中
console.log(signature); // 輸出:b94d27b9934d3e08a52e5d27dda7abfd4fac48e3ef5808390ee88f7acec2de9f
六、PKCS7填充
?????對于AES-CBC加密算法,由于其塊大小為128位,因此在加密過程中需要對明文進行填充,以保證其長度滿足加密要求。以下是使用JavaScript實現(xiàn)PKCS7填充的代碼示例:文章來源:http://www.zghlxwxcb.cn/news/detail-476601.html
function padAesCBC(plainText, blockSize) {
const padding = new Buffer(blockSize - plainText.length % blockSize); // 計算需要填充的字節(jié)數(shù)
for (let i = 0; i < padding.length; i++) {
padding[i] = padding.length; // 將填充字節(jié)設(shè)置為填充長度
}
return Buffer.concat([plainText, padding]); // 將明文和填充后的數(shù)據(jù)合并成一個緩沖區(qū)并返回
}
使用方法:文章來源地址http://www.zghlxwxcb.cn/news/detail-476601.html
const secretKey = '1234567890123456'; // 16位密鑰
const plainText = 'Hello World'; // 要加密的明文數(shù)據(jù)
const blockSize = 16; // 加密塊大小為16字節(jié)
const paddedText = padAesCBC(plainText, blockSize); // 對明文進行PKCS7填充,并將填充后的數(shù)據(jù)保存到變量中
const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, { padding: 'pkcs7' }); // 創(chuàng)建一個AES-CBC加密器對象,使用指定的密鑰和填充方式
cipher.setAutoPadding(true); // 設(shè)置自動填充模式為PKCS7
const encryptedData = cipher.update(paddedText, 'utf8', 'base64'); // 對填充后的數(shù)據(jù)進行加密
const finalData = cipher.final('base64'); // 完成加密操作
console.log(encryptedData.toString()); // 輸出:SSdtIGtpbGxpbmcgeW91ciI6IkPw==```
到了這里,關(guān)于常見JavaScript加密算法、JS加密算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!