分析各大常用的JS加密优缺点

  1. Base64编码:

    • 优点:

      • 简单,易于实现。
      • 不是真正的加密,只是编码,可以用于数据传输和存储。
    • 缺点:

      • 不提供数据保密性,容易被解码。
    • 示例代码:

      // 编码
      const encodedData = btoa('Hello, World!');
      console.log(encodedData);
      
      // 解码
      const decodedData = atob(encodedData);
      console.log(decodedData);
      
  2. 哈希函数:

    • 优点:

      • 提供数据完整性验证。
      • 相同输入始终生成相同的哈希值。
    • 缺点:

      • 不可逆,无法还原原始数据。
      • 容易受到彩虹表攻击。
    • 示例代码: 使用JavaScript的crypto.subtle来计算SHA-256哈希值的示例代码:

      async function calculateSHA256Hash(data) {
        const encoder = new TextEncoder();
        const dataBuffer = encoder.encode(data);
        const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
        const hashArray = Array.from(new Uint8Array(hashBuffer));
        const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
        return hashHex;
      }
      
      const originalData = 'Hello, World!';
      calculateSHA256Hash(originalData).then(hash => {
        console.log(hash); // SHA-256哈希值
      });
      
  3. 对称加密:

    • 优点:

      • 加密和解密速度快。
      • 适用于大量数据加密。
    • 缺点:

      • 密钥管理可能复杂。
      • 需要安全地传输密钥。
    • 示例代码: 使用Web Crypto API进行AES加密的示例代码:

      async function encryptData(data, key) {
        const encoder = new TextEncoder();
        const dataBuffer = encoder.encode(data);
        const encryptedData = await crypto.subtle.encrypt({ name: 'AES-GCM', iv: new Uint8Array(12) }, key, dataBuffer);
        return new Uint8Array(encryptedData);
      }
      
      async function decryptData(encryptedData, key) {
        const decryptedData = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: new Uint8Array(12) }, key, encryptedData);
        const decoder = new TextDecoder();
        return decoder.decode(decryptedData);
      }
      
      // 生成随机AES密钥
      crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']).then(key => {
        const originalData = 'Hello, World!';
        encryptData(originalData, key)
          .then(encryptedData => decryptData(encryptedData, key))
          .then(decryptedData => {
            console.log(decryptedData); // 解密后的数据
          });
      });
      
  4. 非对称加密:

    • 优点:

      • 安全性高,一个密钥用于加密,另一个用于解密。
      • 适用于安全通信和数字签名。
    • 缺点:

      • 加密和解密速度相对较慢。
      • 密钥管理复杂。
    • 示例代码: 使用Node.js中的crypto模块执行RSA加密的示例代码:

      const crypto = require('crypto');
      
      // 生成RSA密钥对
      const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
        modulusLength: 2048,
        publicKeyEncoding: {
          type: 'spki',
          format: 'pem',
        },
        privateKeyEncoding: {
          type: 'pkcs8',
          format: 'pem',
        },
      });
      
      const originalData = 'Hello, World!';
      
      // 加密
      const encryptedData = crypto.publicEncrypt(publicKey, Buffer.from(originalData));
      console.log(encryptedData.toString('base64'));
      
      // 解密
      const decryptedData = crypto.privateDecrypt(privateKey, encryptedData);
      console.log(decryptedData.toString());
      
  5. JS在线加密:

js在线加密是一款国内顶尖的js保护方案,已经有许多客户使用。同时配备了一键在线解密其他简单加密的功能.

你可能感兴趣的:(javascript,开发语言,ecmascript)