@anvilco/encryption

中文文档
2.0.4发布于 2023/01/20MITCommonJS零依赖近 30 天下载 4112

RSA and AES Encryption helpers

原始使用文档
文档目录5 节
  1. Install
  2. API
  3. AES
  4. RSA
  5. License

Anvil Encryption

This library is a small wrapper around node's crypto library. It offers convenience methods for encrypting and decrypting arbitrary payloads in both AES and RSA.

For use encrypting / decrypting payloads in Anvil, you can generate an RSA keypair from your organization's settings page.

Horizontal Lockupblack Horizontal Lockup copywhite

Anvil provides easy APIs for all things paperwork.

  1. PDF filling API - fill out a PDF template with a web request and structured JSON data.
  2. PDF generation API - send markdown or HTML and Anvil will render it to a PDF.
  3. Etch E-sign with API - customizable, embeddable, e-signature platform with an API to control the signing process end-to-end.
  4. Anvil Workflows (w/ API) - Webforms + PDF + E-sign with a powerful no-code builder. Easily collect structured data, generate PDFs, and request signatures.

Learn more about Anvil on our Anvil developer page.

Install

yarn add @anvilco/encryption

Then use it

// For RSA functions
import { encryptRSA, decryptRSA } from '@anvilco/encryption'

// For AES functions
import { generateAESKey, encryptAES, decryptAES } from '@anvilco/encryption'

// Could grab the keys from file (or preferably from environment variables)
import fs from 'fs'
const privateKey = fs.readFileSync('path/to/privateKey.pem')
const publicKey = fs.readFileSync('path/to/publicKey.pem')


// RSA
const message = 'Super secret message'
const encryptedRSAMessage = encryptRSA(publicKey, message)
const origRSAMessage = decryptRSA(privateKey, encryptedRSAMessage)
console.log(origRSAMessage === message) // => true

// AES
const aesKey = generateAESKey()
const encryptedAESMessage = encryptAES(aesKey, message)
const origAESMessage = decryptAES(aesKey, encryptedAESMessage)
console.log(origAESMessage === message) // => true

API

There are two functions for RSA: encryptRSA, decryptRSA, and three for AES: generateAESKey, encryptAES, decryptAES.

AES

There are three functions for AES:

  • key = generateAESKey()
  • encryptedMessage = encryptAES(key, plainMessage)
  • plainMessage = decryptAES(key, encryptedMessage)

encryptAES creates a unique IV for each message encrypted and prepends it to the resulting encrypted payload. So encryptedMessage will be in the format

<iv>:<aesEncryptedPayload>

RSA

There are two functions for RSA:

  • encryptedMessage = encryptRSA(publicKey, plainMessage)
  • plainMessage = decryptRSA(privateKey, encryptedMessage)

These functions encrypt / decrypt with RSA and AES. RSA has an upper limit on how much data it can encrypt. So we create an AES key, encrypt the AES key with RSA, then encrypt the actual message with AES.

Note the encrypted payload (result of encryptRSA) is in the format:

<rsaEncryptedAESKey>:<aesEncryptedMessage>

Generating RSA keys

This library does not have a way to generate RSA keys.

You could use openssl:

# This generates a 2048 bit private key to file
openssl genrsa -out privateKey.pem 2048

# This extracts the public key to file
openssl rsa -in privateKey.pem -outform PEM -pubout -out publicKey.pem

You could also use something like node-rsa:

// Example generating a RSA keypair with node-rsa
import NodeRSA from 'node-rsa'
function generateRSAKeypair () {
  const key = new NodeRSA()
  key.generateKeyPair(2048, 65537)
  return {
    publicKey: key.exportKey('pkcs8-public-pem'),
    privateKey: key.exportKey('pkcs8-private-pem'),
  }
}

License

MIT

版本与发布记录

@anvilco/encryption 共发布 8 个版本,首次发布于 2018/09/01;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.4latest2023/01/203 年前
2.0.32022/05/254 年前
2.0.22022/03/264 年前
2.0.12021/04/215 年前
2.0.02020/03/216 年前
1.0.32018/09/018 年前

关于 @anvilco/encryption 的常见问题

@anvilco/encryption 是什么?

RSA and AES Encryption helpers

如何安装 @anvilco/encryption?

在项目目录运行 npm install @anvilco/encryption,或使用 pnpm add / yarn add / bun add。

@anvilco/encryption 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/anvilco__encryption 是否存在。

@anvilco/encryption 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@anvilco/encryption 可以商用吗?

@anvilco/encryption 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@anvilco/encryption 的下载量有多少?

根据 npm 官方下载统计,@anvilco/encryption 在 2026/10/06 – 2026/11/04 这 30 天内被下载 4,112 次,日均约 137 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@anvilco/encryption 还在维护吗?

最新版本 2.0.4 发布于 2023/01/20(3 年前);至今共发布 8 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/09/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。