JSEncrypt

2024-06-26 11:13:51 114
JSEncrypt 是一个零依赖的 JavaScript 库,用于执行 OpenSSL RSA 加密、解密和密钥生成。它为前端开发人员提供了一个简单的解决方案来实现 RSA 加密功能。

特点

  • 零依赖:无需其他库即可使用。
  • 支持 OpenSSL:与 OpenSSL 兼容,可使用 OpenSSL 生成的密钥。
  • 简单易用:提供了简单的 API 来进行加密、解密、签名和验证。
  • 轻量级:文件大小小,适合前端使用。

使用场景

  • 数据传输安全:在客户端和服务器之间传输敏感数据时加密。
  • 用户身份验证:通过签名和验证来确认用户身份。
  • 数据完整性:确保传输的数据没有被篡改。

安装方式

npm 安装

npm install jsencrypt

CDN 引入

通过 jsDelivr CDN 引入:

<script src="https://cdn.jsdelivr.net/npm/jsencrypt/bin/jsencrypt.min.js"></script>

使用示例

加密和解密

<!doctype html>
<html>
<head>
  <title>JavaScript RSA Encryption</title>
  <script src="https://cdn.jsdelivr.net/npm/jsencrypt/bin/jsencrypt.min.js"></script>
</head>
<body>
  <textarea id="pubkey">-----BEGIN PUBLIC KEY-----...</textarea><br/>
  <textarea id="privkey">-----BEGIN RSA PRIVATE KEY-----...</textarea><br/>
  <textarea id="input">This is a test!</textarea><br/>
  <button id="testme">Test Me!</button>
  
  <script>
    document.getElementById('testme').onclick = function() {
      // Encrypt with the public key...
      var encrypt = new JSEncrypt();
      encrypt.setPublicKey(document.getElementById('pubkey').value);
      var encrypted = encrypt.encrypt(document.getElementById('input').value);

      // Decrypt with the private key...
      var decrypt = new JSEncrypt();
      decrypt.setPrivateKey(document.getElementById('privkey').value);
      var decrypted = decrypt.decrypt(encrypted);

      // Check the result
      alert(decrypted === document.getElementById('input').value ? 'It works!' : 'Something went wrong...');
    };
  </script>
</body>
</html>

常用 API 介绍

  • JSEncrypt(): 创建一个新的 JSEncrypt 实例。
  • setPublicKey(pubkey): 设置公钥。
  • setPrivateKey(privkey): 设置私钥。
  • encrypt(data): 使用公钥加密数据。
  • decrypt(data): 使用私钥解密数据。
  • sign(data, hashFunction, hashType): 使用私钥签名数据。
  • verify(data, signature, hashFunction): 使用公钥验证签名。

API 使用示例

var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubkey);
var encrypted = encrypt.encrypt("Hello World");

var decrypt = new JSEncrypt();
decrypt.setPrivateKey(privkey);
var decrypted = decrypt.decrypt(encrypted);

官方资料