加密
你可以使用 AdonisJS 加密模块来加密和解密应用程序中的值。
import Encryption from '@ioc:Adonis/Core/Encryption'
const encrypted = Encryption.encrypt('hello-world')
加密基于 aes-256-cbc
算法,使用 config/app.ts
文件中保存的 appKey
作为秘钥进行加密。
加密 / 解密值#
加密模块还为每个加密调用生成一个唯一的 iv。因此,两次加密相同的值将导致不同的可视化输出。
encrypt#
Encryption.encrypt
方法加密给定值。
Encryption.encrypt('hello-world')
你还可以选择定义到期日期。在给定的时间过期之后,解密将失败。
Encryption.encrypt('hello-world', '2 hours')
最后,你还可以定义加密的目的。当加密特定任务或资源的值时,这通常很有帮助。
例如,你想生成一个加密链接以共享帖子,然后希望确保该链接仅在帖子 ID 与您生成链接的 ID 相同时才有效。
const key = Encryption.encrypt(`post-${post.id}`, '30mins', String(post.id))
return `/posts/${post.id}?key=${key}`
在解密过程中,你可以检查 post id 是否匹配,如下所示。
Encryption.decrypt(key, String(params.id))
decrypt#
Encryption.decrypt
方法对加密值进行解密。无法解密值时返回 null
。
Encryption.decrypt(value)
Encryption.decrypt(value, purpose)
支持数据类型#
你可以加密以下数据类型。
// Object
Encryption.encrypt({
id: 1,
fullName: 'virk',
})
// Array
Encryption.encrypt([1, 2, 3, 4])
// Boolean
Encryption.encrypt(true)
// Number
Encryption.encrypt(10)
// 数据对象转换为 ISO 字符串
Encryption.encrypt(new Date())
使用自定义密钥#
加密模块使用 config/app.ts
文件中定义的 appKey
作为加密值的秘密。但是,你也可以使用自定义密钥创建子实例。
const userEncryptor = Encryption.child({
secret: user.secret,
})
userEncryptor.encrypt('hello-world')
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。