长哈希填充问题
Padding Issue of Long Hashes
对于加密专家,我最近想到了一个问题。举个例子,假设我们有一个很长的字节串,我们想把这个字符串放入一个散列函数中,我们可以把它作为SHA1来说明。正如我们所知,SHA1以64字节的块为输入,afaik的每个哈希函数在处理之前都需要填充消息。现在的问题是,是最后一个块需要填充还是整个字符串?这很重要,因为在填充结束时,我们会附加长度。谢谢所有。
现在的问题是,是最后一个块需要填充还是整个字符串?
我相信这两件事是一样的。填充整个字符串意味着只填充最后一个块。
一些来自wiki的伪代码
查看代码可能会给你一些启示:摘自:mattmahoney.net/dc/sha1.c
void SHA1PadMessage(SHA1Context *context)
{
/*
* Check to see if the current message block is too small to hold
* the initial padding bits and length. If so, we will pad the
* block, process it, and then continue padding into a second
* block.
*/
if (context->Message_Block_Index > 55)
{
context->Message_Block[context->Message_Block_Index++] = 0x80;
while(context->Message_Block_Index < 64)
{
context->Message_Block[context->Message_Block_Index++] = 0;
}
SHA1ProcessMessageBlock(context);
while(context->Message_Block_Index < 56)
{
context->Message_Block[context->Message_Block_Index++] = 0;
}
}
else
{
context->Message_Block[context->Message_Block_Index++] = 0x80;
while(context->Message_Block_Index < 56)
{
context->Message_Block[context->Message_Block_Index++] = 0;
}
}
/*
* Store the message length as the last 8 octets
*/
context->Message_Block[56] = context->Length_High >> 24;
context->Message_Block[57] = context->Length_High >> 16;
context->Message_Block[58] = context->Length_High >> 8;
context->Message_Block[59] = context->Length_High;
context->Message_Block[60] = context->Length_Low >> 24;
context->Message_Block[61] = context->Length_Low >> 16;
context->Message_Block[62] = context->Length_Low >> 8;
context->Message_Block[63] = context->Length_Low;
SHA1ProcessMessageBlock(context);
}
相关文章:
- C++ 填充数组时遇到问题
- 将十六进制值设置为用于填充的字符变量时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 使用队列和列表 STL 进行C++分配。在将数据填充到列表或队列中然后打印该数据时遇到问题
- 在使用结构体和用函数填充其变量(使用指针)时遇到问题
- 用零填充矩阵行的问题
- BMP文件行填充问题
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 清除并重新填充 std::vector<std::vector<T>>导致分配问题
- 填充 c++ 数组时遇到问题,每个索引处只有最后一项
- 尝试递归填充和打印出两组的所有归纳函数的问题
- 这个简单的木炭填充器有什么问题
- 在检查现有元素时,从文件填充并行数组时出现问题
- 填充动态类模板数组时遇到问题
- 使用__declspec的内存填充问题
- 使用 C++11 的 std::regex 填充子匹配时遇到问题
- c++填充数组问题
- 长哈希填充问题
- 内存填充问题