简介
bt-data 是一个轻量级的 JavaScript 库,提供了前端实现数据加密和解密的功能。它支持主流的对称加密算法和非对称加密算法,并且具有简单易用的 API 接口,方便前端开发人员使用。
bt-data 的官方网站:https://github.com/monkindey/bt-data
安装
通过 npm 安装 bt-data:
npm install bt-data
然后在你的项目中引入:
import btData from 'bt-data';
使用
对称加密
bt-data 支持主流的对称加密算法,包括 AES、DES、3DES、RC4 和 Blowfish。
加密
使用 btData.symmetric.encrypt 对数据进行加密。API 接口如下:
btData.symmetric.encrypt(key, plaintext, algorithm, mode, padding)
参数说明:
- key:加密密钥。
- plaintext:待加密的数据,可以是一个字符串或一个 Buffer 对象。
- algorithm:加密算法,可选值为 "aes"、"des"、"3des"、"rc4" 和 "blowfish",默认值为 "aes"。
- mode:加密模式,可选值为 "ecb"、"cbc"、"cfb" 和 "ofb",默认值为 "ecb"(仅在 algorithm 为 "aes"、"des" 或 "3des" 时有效)。
- padding:填充模式,可选值为 "pkcs5"、"pkcs7"、"zero" 和 "ansix923",默认值为 "pkcs5"(仅在 algorithm 为 "aes"、"des" 或 "3des" 时有效)。
示例代码:
const key = '1234567890123456'; const plaintext = 'hello, world!'; const ciphertext = btData.symmetric.encrypt(key, plaintext); console.log(ciphertext); // 输出加密后的密文
解密
使用 btData.symmetric.decrypt 对加密数据进行解密。API 接口如下:
btData.symmetric.decrypt(key, ciphertext, algorithm, mode, padding)
参数说明:
- key:解密密钥。
- ciphertext:待解密的数据,必须是一个已经加密过的字符串。
- algorithm:解密算法,可选值为 "aes"、"des"、"3des"、"rc4" 和 "blowfish",默认值为 "aes"。
- mode:解密模式,可选值为 "ecb"、"cbc"、"cfb" 和 "ofb",默认值为 "ecb"(仅在 algorithm 为 "aes"、"des" 或 "3des" 时有效)。
- padding:填充模式,可选值为 "pkcs5"、"pkcs7"、"zero" 和 "ansix923",默认值为 "pkcs5"(仅在 algorithm 为 "aes"、"des" 或 "3des" 时有效)。
示例代码:
const key = '1234567890123456'; const ciphertext = 'IUE9GIGBbNQgomMkfAPcZQ=='; const plaintext = btData.symmetric.decrypt(key, ciphertext); console.log(plaintext); // 输出解密后的明文
非对称加密
bt-data 支持主流的非对称加密算法,包括 RSA 和 DSA。
生成密钥对
使用 btData.asymmetric.generateKeyPair 生成密钥对。API 接口如下:
btData.asymmetric.generateKeyPair(keySize, algorithm)
参数说明:
- keySize:密钥长度,单位为比特。对于 RSA,建议使用 1024 位或以上的密钥;对于 DSA,建议使用 512 位或以上的密钥。
- algorithm:算法名称,可选值为 "rsa" 和 "dsa",默认值为 "rsa"。
示例代码:
const keySize = 1024; const algorithm = 'rsa'; const keyPair = btData.asymmetric.generateKeyPair(keySize, algorithm); console.log(keyPair.privateKey); // 输出私钥 console.log(keyPair.publicKey); // 输出公钥
公钥加密
使用 btData.asymmetric.encryptByPublicKey 对数据进行加密。API 接口如下:
btData.asymmetric.encryptByPublicKey(publicKey, plaintext, algorithm)
参数说明:
- publicKey:公钥。
- plaintext:待加密的数据,可以是一个字符串或一个 Buffer 对象。
- algorithm:加密算法,可选值为 "rsa" 和 "dsa",默认值为 "rsa"。
示例代码:
-- -------------------- ---- ------- ----- --------- - ----------- --- ------ ----------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - --------- --- ------ ------------ ----- --------- - ------- -------- ----- ---------- - ----------------------------------------------- ----------- ------------------------ -- --------
私钥解密
使用 btData.asymmetric.decryptByPrivateKey 对加密数据进行解密。API 接口如下:
btData.asymmetric.decryptByPrivateKey(privateKey, ciphertext, algorithm)
参数说明:
- privateKey:私钥。
- ciphertext:待解密的数据,必须是一个已经加密过的字符串。
- algorithm:加密算法,可选值为 "rsa" 和 "dsa",默认值为 "rsa"。
示例代码:
-- -------------------- ---- ------- ----- ---------- - ----------- --- ------- ----------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - --------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -------------------------------------------------------------------- - --------------------------------------- - ------------------------------------------------------------------------------ -------- ------------------------------------------------------------------------------------------------------------------------