我在C ++中使用openssl sha256函数。 以下两种计算sha256的方法有什么区别?
Way1:只需调用下面的SHA256方法
SHA256((unsigned char*)buffer_to_hash, buffer_size, hashed_payload);
Way2:使用SHA256_CTX,SHA256_Init,SHA256_Update和SHA256_Final。如上所述 generate sha256 with openssl and C++
两个程序都产生相同的结果
已提及两种方法的示例here
答案 0 :(得分:2)
Modulo bug等等,两者的意图基本不同。第一种是批处理样式处理。也就是说:你给它一个完整的字符串,它会产生一个完整字符串的哈希值。
第二个是逐步进行散列。如果您没有(或想要)访问要立即进行哈希处理的整个字符串,它可以让您读取一些数据,对其进行操作,阅读更多数据,对其进行操作等等,直到您阅读完所有数据为止。数据。最后,您可以获得整个数据流的整体哈希值。
例如,假设您在具有4 Gigs RAM的计算机上运行此操作,并且您想要散列16 GB的文件。由于数据不适合RAM(甚至接近它),因此对于这种情况,第二种可能是更好的选择。同样,如果您通过网络接收数据,但不(必然)想要存储所有原始数据包,只需这样就可以对它们进行哈希处理(例如)确认收据。