【问题标题】:openssl sha256 difference between two way of calculatingopenssl sha256两种计算方式的区别
【发布时间】:2013-08-31 13:06:35
【问题描述】:

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

方式1:只需像下面这样调用SHA256方法

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

方式 2:使用 SHA256_CTX、SHA256_Init、SHA256_Update 和 SHA256_Final。正如这里提到的 generate sha256 with openssl and C++

两个程序产生相同的结果

两种方法的例子都提到了here

【问题讨论】:

    标签: c++ openssl sha sha256


    【解决方案1】:

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

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

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

    【讨论】:

    • 我在内存中有整个对象,所以我可以使用way1。但是有推荐的方法吗?我看到的每个教程都使用 way2,我无法找到 way1 的官方文档
    • @nachiappan:如果您可以一次轻松访问所有数据,您不妨使用第一种方法。
    • 我在openssl.org/docs/apps/openssl.html找不到sha256的官方文档
    • @nachiappan:就搜索文档而言,恐怕您几乎只能靠自己了。如果你真的卡住了,你可以看看:codereview.stackexchange.com/q/13288/489
    • @nachiappan 虽然 Jerry 是正确的,但您不应该使用这两种方法中的任何一种,而是使用 EVP 通用接口,请参阅:openssl.org/docs/crypto/EVP_DigestInit.html
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2015-09-11
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多