1

我在 C++ 中使用 openssl sha256 函数。以下两种计算 sha256 的方法有什么区别?

Way1:只需调用 SHA256 方法,如下所示

SHA256((unsigned char*)buffer_to_hash, buffer_size, hashed_payload);

方式2:使用SHA256_CTX、SHA256_Init、SHA256_Update和SHA256_Final。如前所述 ,使用 openssl 和 C++ 生成 sha256

两个程序产生相同的结果

这里提到了这两种方法的示例

4

1 回答 1

2

模数错误等,两者的意图基本不同。第一个是批处理样式处理。也就是说:你给它一个完整的字符串,它会产生这个完整字符串的哈希值。

第二个增量散列。如果您没有(或不希望)访问要一次散列的整个字符串,它允许您读取一些数据,对其进行操作,再读取一些数据,对其进行操作,等等,直到您阅读所有数据。最后可以得到整个数据流的整体hash。

举个例子,假设您在一台具有 4 Gigs RAM 的计算机上运行它,并且您想要散列一个 16 GB 的文件。由于数据不适合 RAM(甚至不适合它),因此对于这种情况,第二个可能是更好的选择。同样,如果您通过网络接收数据,但不(必然)想要存储所有原始数据包,以便您可以散列它们并(例如)确认接收。

于 2013-08-30T20:42:11.773 回答