Javascript pbkdf2返回包含128个字符而不是64个字符的哈希

Javascript pbkdf2返回包含128个字符而不是64个字符的哈希,javascript,node.js,cryptography,cryptojs,pbkdf2,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.LENG

我想在创建用户时创建密码哈希,并将它们存储到我的数据库中。“我的数据库密码”列存储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

你可能得到的是十六进制编码的哈希值。@JamesKPolk确实,他正在转换为十六进制。在他提供的代码段中搜索“转换”。或者他想要64字节的哈希,在这种情况下,他需要更改他的DB表。@Erwan
32 chars*8=256bit
。IMHO 256bit对于pbkdf2生成的用于基于密码登录的密钥来说是足够大的。@Robert您当然是对的!256位是密码哈希所需的更多。存储512位密码哈希没有意义。