博客 / 詳情

返回

常見JavaScript加密算法、JS加密算法

一、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==```
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.