派生密码密钥
本课属于 Coddy Node.js 学习旅程的“身份验证与安全”单元。第 2 课,共 24 课。
密码密钥由密码和盐计算得出。与编码不同,这种计算并非为了能够逆向还原。Scrypt 会让每次尝试都需要耗费计算资源,从而提高猜测密码的成本。使用相同的密码、盐和派生设置(包括密钥长度),就能得到可重复的密钥。这个派生密钥通常称为密码哈希。
const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');第三个参数是密钥的字节长度。提供的辅助函数使用 promisify 将基于回调的 Node scrypt 转换为返回 promise 的函数。你可以像等待读取文件一样使用 await。本次练习使用固定的盐,方便你比较结果;实际存储密码时会使用新生成的随机盐。
接下来的练习会生成存储新密码时所需的新随机盐。
挑战
简单这是一个小型练习项目。项目已提供设置,只编辑 exercise.js。
完成这个函数:根据提供的密码和盐值生成一个 32 字节的密钥,然后将其十六进制文本返回到 key 中。向 /result 两次发送 POST {"password":"practice","salt":"fixed-for-this-exercise"}:会得到相同的 64 个字符的密钥。更改任一输入,密钥也会改变。
亲手试试
import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
return { key: password };
}
身份验证与安全中的所有课
自己练习: Express 在线编辑器