加密
使用加密服务,您可以在应用程序中加密和解密值。加密基于 aes-256-cbc 算法,我们在最终输出中附加完整性哈希(HMAC)以防止值被篡改。
encryption 服务使用存储在 config/app.ts 文件中的 appKey 作为加密值的密钥。
建议保持
appKey的安全,并使用环境变量将其注入到应用程序中。任何能够访问此密钥的人都可以解密值。密钥长度应至少为 16 个字符,并具有加密安全的随机值。您可以使用
node ace generate:key命令生成密钥。如果您决定稍后更改密钥,将无法解密现有值。这将导致现有 cookie 和用户会话失效。
加密值
您可以使用 encryption.encrypt 方法加密值。该方法接受要加密的值和可选的时间持续时间,超过该时间后该值将被视为已过期。
ts
import encryption from '@adonisjs/core/services/encryption'
const encrypted = encryption.encrypt('hello world')定义时间持续时间,超过该时间后该值将被视为已过期且无法解密。
ts
const encrypted = encryption.encrypt('hello world', '2 hours')解密值
可以使用 encryption.decrypt 方法解密加密值。该方法接受加密值作为第一个参数。
ts
import encryption from '@adonisjs/core/services/encryption'
encryption.decrypt(encryptedValue)支持的数据类型
传递给 encrypt 方法的值使用 JSON.stringify 序列化为字符串。因此,您可以使用以下 JavaScript 数据类型。
- string
- number
- bigInt
- boolean
- null
- object
- array
ts
import encryption from '@adonisjs/core/services/encryption'
// 对象
encryption.encrypt({
id: 1,
fullName: 'virk',
})
// 数组
encryption.encrypt([1, 2, 3, 4])
// 布尔值
encryption.encrypt(true)
// 数字
encryption.encrypt(10)
// BigInt
encryption.encrypt(BigInt(10))
// Date 对象转换为 ISO 字符串
encryption.encrypt(new Date())使用自定义密钥
您可以直接创建 Encryption 类的实例来使用自定义密钥。
ts
import { Encryption } from '@adonisjs/core/encryption'
const encryption = new Encryption({
secret: 'alongrandomsecretkey',
})