gpt4 book ai didi

java - 何时在消息摘要中使用盐

转载 作者:行者123 更新时间:2023-12-02 17:34:00 25 4
gpt4 key购买 nike

我使用了消息摘要,我看到它有时与salt一起使用

        synchronized (hasher) {
hasher.update(salt); // "Updates" the digest using the specified byte.
salt++;
digest = hasher.digest(data); // Final "updates" on the digest using the specified array of bytes, then "completes" the digest computation.
}

有时不加盐:

 md.update(data);
byte[] toChapter1Digest = md.digest();

现在,我什么时候可以将摘要与salt一起使用?不应该吗?经过简短的研究,我得出的结论是,只要涉及密码元素,就会使用盐。

最佳答案

消息摘要(也称为“哈希”)是摘要或 cryptographic hash function 的输出,这是一种单向固定大小输出压缩函数,具有输入(消息)的微小变化会导致输出摘要发生较大的、不可预测的变化的特性。如何使用这样的函数很大程度上取决于您想要用它做什么。

术语"salt"指的是散列函数的一个小的随机输入,用于在添加可以以某种方式预测的附加输入之前改变函数的状态。这是一种安全机制,是为了在使用消息摘要作为密码 validator 功能时保护密码而开发的。如果不使用盐,则具有相同密码的任何用户都将在用户数据库中存储相同的密码哈希值。对于以这种方式使用的最常见的消息摘要函数(MD5、NTLM 密码哈希等),存在巨大的高效哈希反转表( "rainbow tables" ),获取数据库的攻击者只需执行表查找即可获取每个用户的明文密码。使用盐可以防止生成这些表,因为盐的每个字节都会生成 256x size increase of the lookup table.

需要注意的是,对于密码存储和验证,简单的消息摘要加盐不足以提供足够的保护。这是一个复杂的问题,并且已经存在可以正确抵抗攻击的解决方案:PBKDF2 , bcrypt , scrypt等。

同样,验证消息是否正确传输需要使用更高级的加密结构,称为哈希消息验证代码 (HMAC)。它建立在消息摘要功能的基础上,但使用加密 key 不仅保证 protected 消息的完整性,而且保证消息摘要本身的真实性。

关于java - 何时在消息摘要中使用盐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28942244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com