Hash 试着去理解“是什么意思”;“哈希上下文”;

Hash 试着去理解“是什么意思”;“哈希上下文”;,hash,Hash,有人能解释一下这里的“上下文”是什么意思吗 当数据被散列时,它被独立地提供给每个散列 上下文由于上下文的初始化方式不同,因此 一旦输入密码短语,每个密码短语将产生不同的哈希输出。** 哈希,将多个哈希的输出数据连接起来, 首先对最左边的部分进行散列,以生成包含任何多余八位字节的密钥数据 在右边 来源:您可以在您链接的同一文档的前面部分看到它: 3.7.1.1。简单S2K 这将直接散列字符串以生成密钥数据。见下文 了解如何进行此哈希 简单S2K对密码短语进行散列以生成会话密钥。这个 执行此操作的方

有人能解释一下这里的“上下文”是什么意思吗

当数据被散列时,它被独立地提供给每个散列 上下文由于上下文的初始化方式不同,因此 一旦输入密码短语,每个密码短语将产生不同的哈希输出。** 哈希,将多个哈希的输出数据连接起来, 首先对最左边的部分进行散列,以生成包含任何多余八位字节的密钥数据 在右边


来源:

您可以在您链接的同一文档的前面部分看到它:

3.7.1.1。简单S2K

这将直接散列字符串以生成密钥数据。见下文 了解如何进行此哈希

简单S2K对密码短语进行散列以生成会话密钥。这个 执行此操作的方式取决于会话密钥的大小 (这取决于使用的密码)和散列的大小 算法的输出。如果哈希大小大于会话密钥 大小,哈希的高阶(最左边)八位字节用作 钥匙

假设您正在寻找一个128位的会话密钥,但是哈希算法输出256位的值,那么您只需删除128位高阶位并将其用作会话密钥

如果哈希大小小于密钥大小,则 创建哈希上下文——足以生成所需的密钥数据。 这些实例预先加载了0、1、2、。。。零的八位字节(即 也就是说,第一个实例没有预加载,第二个实例得到 预加载1个零八位组,第三个预加载两个 八位字节的零,等等)

假设我们在寻找512位的会话密钥,哈希算法输出128位值,我们创建4个哈希上下文,因为4个哈希输出一起将提供所需的512位。我们基本上将使用相同的哈希算法来生成四个值,但是为了确保这四个值添加了一些值,我们对它们进行了不同的初始化/种子设定。在面向对象编程中,如果您想象散列算法体现在一个类中,这样您就可以执行类似于此伪代码的操作

Hash my_hash(seed);
for (word in data)
    my_hash.feed(word);
use my_hash.output();

……然后你可以把每一个<代码>哈希< /Cord>对象看作是一个上下文,对于一个比哈希输出宽度更宽的会话密钥,你只需要做这样的事情:

Hash my_hashes[4] = { seed1, seed2, seed3, seed4 };
for (word in data)
    for (my_hash in my_hashes)
         my_hash.feed(word);
512_bit_hash = my_hash[0] + my_hash[1] + my_hash[2] + my_hash[3];
Hash my_hashes[4] = { seed1, seed2, seed3, seed4 };
for (word in data)
    for (my_hash in my_hashes)
         my_hash.feed(word);
512_bit_hash = my_hash[0] + my_hash[1] + my_hash[2] + my_hash[3];