加密

未匹配的标注

你可以使用 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')

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs/5.x/se...

译文地址:https://learnku.com/docs/adonisjs/5.x/se...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~