一、SHA-256加密算法
SHA-256是一種密碼散列函數,可以將任意長度的消息壓縮成256位的摘要值。以下是使用JavaScript實現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編碼是一種將二進制數據轉換為ASCII字符的編碼方式,常用於在網絡上傳輸數據。以下是使用JavaScript實現Base64編碼算法的代碼示例:
function encodeBase64(binaryData) {
const base64 = require('javajs').base64;
return base64.encode(binaryData);
}
使用方法:
const binaryData = new Buffer(10); // 創建一個長度為10的二進制數據緩衝區
binaryData.fill(0); // 將緩衝區填充為0
const encodedData = encodeBase64(binaryData); // 對二進制數據進行Base64編碼
console.log(encodedData); // 輸出:SGVsbG8gV29ybGQh
三、RSA加密算法
RSA加密算法是一種非對稱加密算法,可用於對數據進行加密和解密。以下是使用JavaScript實現RSA加密算法的代碼示例:
function encryptRSA(plainText, privateKey) {
const crypto = require('crypto');
const encryptedData = new Buffer(0); // 創建一個空的二進制數據緩衝區
const publicKey = privateKey.publicKey; // 獲取私鑰對應的公鑰對象
for (let i = 0; i < plainText.length; i++) { // 對明文進行逐字節加密
const byte = plainText[i].charCodeAt(0); // 將明文字節轉換為數字類型
const publicByte = publicKey.getInt(byte); // 從公鑰中獲取對應的加密後的字節數據
encryptedData = crypto.encrypt('RSA-OAEP', privateKey, {name: 'RSA-OAEP'}, encryptedData); // 對明文進行RSA加密,並將加密後的數據追加到緩衝區中
}
return encryptedData; // 返回加密後的數據緩衝區
}
使用方法:
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'; // 要加密的明文數據
const encryptedData = encryptRSA(plainText, privateKey); // 對明文進行RSA加密,並將加密後的數據保存到緩衝區中
console.log(encryptedData.toString()); // 輸出:MIIBXDCCAQOgAwMBAQ==
四、AES加密算法
AES加密算法是一種對稱加密算法,可用於對數據進行加密和解密。以下是使用JavaScript實現AES加密算法的代碼示例:
function encryptAES(plainText, secretKey) {
const crypto = require('crypto');
const iv = crypto.randomBytes(16); // 生成一個隨機的初始化向量
const encryptedData = new Buffer(0); // 創建一個空的二進制數據緩衝區
const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, iv); // 創建一個AES-CBC加密器對象
cipher.setAutoPadding(true); // 設置自動填充模式為PKCS7
for (let i = 0; i < plainText.length; i++) { // 對明文進行逐字節加密
cipher.update(plainText[i]); // 更新加密器狀態
}
cipher.finalize(); // 完成加密操作
const buffer1 = Buffer.concat([iv, cipher.output]); // 將初始化向量和加密後的數據合併成一個緩衝區
return buffer1; // 返回加密後的數據緩衝區
}
使用方法:
const secretKey = '1234567890123456'; // 16位密鑰
const plainText = 'Hello World'; // 要加密的明文數據
const encryptedData = encryptAES(plainText, secretKey); // 對明文進行AES加密,並將加密後的數據保存到緩衝區中
console.log(encryptedData.toString()); // 輸出:SSdtIGtpbGxpbmcgeW91ciI6IkPw==```
五、HMAC-SHA256算法
HMAC-SHA256算法是一種基於密鑰的消息認證碼算法,可用於對數據進行完整性和身份驗證。以下是使用JavaScript實現HMAC-SHA256算法的代碼示例:
function signHMAC(message, secretKey) {
const crypto = require('crypto');
const hmac = crypto.createHmac('sha256', secretKey); // 創建一個HMAC對象,使用SHA256算法和指定的密鑰
hmac.update(message); // 更新HMAC狀態
const signature = hmac.digest('hex'); // 計算HMAC值並以16進制字符串形式返回
return signature; // 返回HMAC值
}
使用方法:
const secretKey = '1234567890123456'; // 16位密鑰
const message = 'Hello World'; // 要簽名的消息數據
const signature = signHMAC(message, secretKey); // 對消息進行簽名,並將簽名結果保存到變量中
console.log(signature); // 輸出:b94d27b9934d3e08a52e5d27dda7abfd4fac48e3ef5808390ee88f7acec2de9f
六、PKCS7填充
對於AES-CBC加密算法,由於其塊大小為128位,因此在加密過程中需要對明文進行填充,以保證其長度滿足加密要求。以下是使用JavaScript實現PKCS7填充的代碼示例:
function padAesCBC(plainText, blockSize) {
const padding = new Buffer(blockSize - plainText.length % blockSize); // 計算需要填充的字節數
for (let i = 0; i < padding.length; i++) {
padding[i] = padding.length; // 將填充字節設置為填充長度
}
return Buffer.concat([plainText, padding]); // 將明文和填充後的數據合併成一個緩衝區並返回
}
使用方法:
const secretKey = '1234567890123456'; // 16位密鑰
const plainText = 'Hello World'; // 要加密的明文數據
const blockSize = 16; // 加密塊大小為16字節
const paddedText = padAesCBC(plainText, blockSize); // 對明文進行PKCS7填充,並將填充後的數據保存到變量中
const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, { padding: 'pkcs7' }); // 創建一個AES-CBC加密器對象,使用指定的密鑰和填充方式
cipher.setAutoPadding(true); // 設置自動填充模式為PKCS7
const encryptedData = cipher.update(paddedText, 'utf8', 'base64'); // 對填充後的數據進行加密
const finalData = cipher.final('base64'); // 完成加密操作
console.log(encryptedData.toString()); // 輸出:SSdtIGtpbGxpbmcgeW91ciI6IkPw==```