📜  在 vanilla javascript 中加密解密(1)

📅  最后修改于: 2023-12-03 14:51:12.899000             🧑  作者: Mango

在 Vanilla JavaScript 中加密解密

加密和解密是在计算机编程中非常常见的操作。在 Vanilla JavaScript 中,我们可以使用各种算法和技术来实现这些操作。本文将为你介绍一些常见的加密和解密方法,以及在 Vanilla JavaScript 中如何实现它们。

加密方法

在 Vanilla JavaScript 中,我们可以使用以下方法来加密数据:

1. Base64 编码

Base64 编码是一种将二进制数据转换为 ASCII 字符的编码方法。可以使用 JavaScript 的 btoa() 函数将字符串转换为 Base64 编码,使用 atob() 函数将 Base64 编码转换为字符串。

// 将字符串编码为 Base64
const encodedString = btoa('Hello, World!');
console.log(encodedString); // "SGVsbG8sIFdvcmxkIQ=="

// 将 Base64 编码解码为字符串
const decodedString = atob('SGVsbG8sIFdvcmxkIQ==');
console.log(decodedString); // "Hello, World!"
2. 单向哈希函数

单向哈希函数是一种不可逆的加密方法,它将输入数据转换为固定长度的哈希值。在 JavaScript 中,我们可以使用多种哈希算法,如 MD5、SHA-1、SHA-256 等。

// 使用 SHA-256 算法计算字符串的哈希值
function sha256(input) {
  const encoder = new TextEncoder();
  const data = encoder.encode(input);

  return crypto.subtle.digest('SHA-256', data)
    .then(buffer => {
      const hashArray = Array.from(new Uint8Array(buffer));
      const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
      return hashHex;
    });
}

sha256('Hello, World!')
  .then(hash => {
    console.log(hash); // "65a8e27d8879283831b664bd8b7f0ad4b756f1b221f44f174fddc9a508c6626b"
  });
3. 对称加密算法

对称加密算法使用相同的密钥来同时加密和解密数据。在 JavaScript 中,我们可以使用 AES、DES 等对称加密算法。需要使用第三方库来实现这些算法,如 crypto-js

// 使用 AES 对称加密算法加密和解密字符串
const key = 'my-secret-key';
const text = 'Hello, World!';

// 加密
const encrypted = CryptoJS.AES.encrypt(text, key).toString();
console.log(encrypted); // "U2FsdGVkX18nqCqPumDLsD/R8wMn04hUguHBmvaPBaE="

// 解密
const decrypted = CryptoJS.AES.decrypt(encrypted, key).toString(CryptoJS.enc.Utf8);
console.log(decrypted); // "Hello, World!"
解密方法

除了上述加密方法的解密部分,还可以使用其他特定算法来解密数据。

// 举例:解密 Caesar 密码
function caesarDecrypt(ciphertext, shift) {
  let plaintext = '';
  for (let i = 0; i < ciphertext.length; i++) {
    let charCode = ciphertext.charCodeAt(i);
    if (charCode >= 65 && charCode <= 90) {
      // 大写字母
      charCode = (charCode - shift - 65 + 26) % 26 + 65;
    } else if (charCode >= 97 && charCode <= 122) {
      // 小写字母
      charCode = (charCode - shift - 97 + 26) % 26 + 97;
    }
    plaintext += String.fromCharCode(charCode);
  }
  return plaintext;
}

const encryptedText = 'Khoor, Zruog!';
const shift = 3;
const decryptedText = caesarDecrypt(encryptedText, shift);
console.log(decryptedText); // "Hello, World!"
小结

在 Vanilla JavaScript 中,我们可以使用多种方法和算法来加密和解密数据。本文提供了三种常见的加密方法,并给出了使用第三方库进行对称加密的示例。你可以根据具体需求选择合适的方法和算法来保护你的数据。无论是使用 Base64 编码、单向哈希函数还是对称加密算法,你都应该在实际应用中注意数据安全和算法的选择。

希望本文对你在 Vanilla JavaScript 中实现加密解密提供了帮助!