javascript - pbkdf2 返回一个包含 128 个字符而不是 64 个字符的散列

标签 javascript node.js cryptography cryptojs pbkdf2

我想在创建用户时创建密码哈希并将它们存储到我的数据库中。我的数据库密码列存储 64 个字符的哈希值 (nvarchar(64))。我的哈希配置:

const byteAmount: number = Number(process.env.BYTE_AMOUNT) || 16;
const iterations: number = Number(process.env.ITERATIONS) || 100;
const length: number = Number(process.env.LENGTH) || 64;
const algorithm: string = process.env.ALGORITHM || 'sha512';
const conversion: string = process.env.CONVERSION || 'Hex';

当散列用户明文密码时我使用这个函数

public hashPassword = (password: BinaryLike, passwordSalt: BinaryLike): string => {
    const { iterations, length, algorithm }: { iterations: number, length: number, algorithm: string } = passwordConfig;
    const passwordHash: string = pbkdf2Sync(password, passwordSalt, iterations, length, algorithm).toString(passwordConfig.conversion);
    return passwordHash;
}

不幸的是,哈希函数返回一个包含 128 个字符的密码哈希。是否可以定义散列长度,或者我总是返回 128 个字符长的散列?

最佳答案

参数 keylen(代码段中的 length)指定返回缓冲区中的字节数。将此缓冲区转换为 hex 字符串会使返回的字符串加倍,因为每个字节由两个字符表示。

如果你想得到一个 64 个字符的 hex 字符串,那么你必须设置 length = 32

关于javascript - pbkdf2 返回一个包含 128 个字符而不是 64 个字符的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909199/

相关文章:

Java 和 python 没有获得相同的 sha-1 值

javascript - 将 OAuth token 传递给 JavaScript 客户端的安全方式

javascript - 如何在 Javascript 中对项目类别进行排序

node.js - 如何从 Ubuntu 中删除 Node 版本 0.12?

.net - key 容器,足够安全以存储私钥?

c++ - 解密过程中添加了多余的字母

javascript - 如何访问 iframe 历史记录长度

javascript - Bootstrap容器中的背景色在Electron中不起作用

node.js - 发送 Content-Type : application/json post with node. js

node.js - 我想更新 Node.js 中的表单数据,但每当我运行此代码时,它都会将所有值设置为 null