1
4
MD5和其他一些哈希函数基于 MerkleâDamgÃ¥rd construction 。它支持数据的增量/渐进/流哈希。在数据被转换为内部状态(其具有固定大小)之后,执行最后一个最终步骤以通过填充和处理最后一个块并随后通过简单地返回最终状态来生成最终散列。 这可能也是为什么许多哈希库函数都是以这样的方式设计的,包括更新和最终确定步骤。 要回答您的问题: 不,文件内容不保存在缓冲区中,而是转换为固定大小的内部状态。 |
2
4
所有现代加密哈希函数的创建方式都是可以增量更新的。
为了允许增量更新,消息的输入数据首先按块排列。这些块按顺序处理。为此,实现通常在内部缓冲输入,直到它有一个完整的块,然后与
当前状态
使用所谓的
压缩函数
初始状态通常简单地由预定的常数值组成。在呼叫期间
对于 MD5 这个 MerkleâDamgÃ¥rd construction 使用。这种常见结构也用于SHA-1和SHA-2。SHA-2是基于SHA-256(SHA-224)和SHA-512(SHA-384、SHA-512/224和SHA-512/256)算法的散列家族。MD5特别使用512位的块大小和128位的内部状态。最后一个块的内部状态(包括填充)只需直接输出,无需对MD5、SHA-1、SHA-256和SHA-512进行任何后处理。 凯克被选为SHA-3。它是基于海绵的结构,具有特定的压缩功能。这不是MerkleDamgrd哈希-这是一个很大的原因 为什么? 它被选为SHA-3。它仍然具有MerkleDamgrd哈希的所有更新属性 设计 以与SHA-2兼容。它像前面提到的散列一样分割和缓冲块,但它具有更大的内部状态,并对输出执行最终操作,这可以说是更安全的。 因此,当您使用现代哈希构造(如MD5)时,您在不知不觉中执行了额外的缓冲。幸运的是,512位+128位状态大小的单个块的缓冲不会导致内存耗尽。在计算最终哈希值之前,哈希实现当然不需要缓冲整个消息。 笔记:
|
Jahongir Rahmonov · 计算文件的校验和 6 年前 |
Lev Knoblock · 类哈希函数 6 年前 |
Sazzad Hissain Khan · 算法-在二维矩阵中搜索 6 年前 |
Asur · 如何在PHP中同时使用多种算法对文件进行哈希? 6 年前 |
OofYeetMcGee · 实现PBKDF2 6 年前 |
yibs · 如何在Perl中计算csv中具有相同id的项目数 6 年前 |