我正在维基百科的伪代码中实现SHA1算法。
它说我应该将原始长度附加到消息的64位,所以我尝试了以下内容:
// new_message is of type char[] and is 9+ bytes long
*((__int64*)(new_message-8)) = (__int64) length;
这会使new_message的内存损坏。
有人可以发现错误吗?
谢谢!
编辑:
耶稣,我是如此愚蠢。 new_message指向我的数组的开始,难怪它崩溃了!答案 0 :(得分:3)
new_message -8- 会从当前指针返回8个字节,意图是什么? append意味着最后添加8个字节,你需要确保 1 GT;最后你有足够的内存(8个额外字节)。 2 - ;你的指针指向正确的位置(追加的位置)
答案 1 :(得分:2)
不确定,没有看到显示new_message
设置的代码部分。
看起来你正在使缓冲区下溢,这会弄乱可能在&new_message[0]
之前的堆头。您可以在__int64
开头之前编写char[]
8个字节,看看事情。