代码之家  ›  专栏  ›  技术社区  ›  ephemerr

qcryptographicshash::Sha3\u 256在Qt5.4和Qt5.8中不同

  •  2
  • ephemerr  · 技术社区  · 6 年前

    QCryptographicHash::hash(data, QCryptographicHash::Sha3_256).toHex() 123456

    Qt5.4: c888c9ce9e098d5864d3ded6ebcc140a12142263bace3a23a36f9905f12bd64a 
    Qt5.8: d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e
    

    在Qt文档中说:

    注意:在5.9之前的Qt版本中,当被要求 凯卡。如果您需要与那些 在Qt版本中,使用Keccak\枚举器。或者,如果源 如果需要兼容性,请定义宏QT\u SHA3\u KECCAK\u COMPAT。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Reinier Torenbeek    6 年前

    你可以使用像这样的在线工具 this one 计算密码的SHA3Āu 256散列 this one 计算Keccak-256散列。它显示您在问题中显示的确切结果。

    所以呢 Maarten's remark 似乎是正确的:文档中描述的行为在某个时候被引入到 5.8 分支机构。你可以自己看看 git history of the file qcryptographichash.cpp in the branch called 5.8 事情发生的地方。你也可以看到这已经完成了 after the tag v5.8.0 was applied .

    版本5.8.0 ,您将得到与中相同的行为 5.4 .


    更新以回应您的评论。

    文档中描述的机制,即定义宏 QT_SHA3_KECCAK_COMPAT 为了保持与旧版本的向后兼容性,不将 5.8 . 显示 5.8 5.9 分支(在这里我减少了输出):

    git difftool -y -x "diff -y -W 72" 5.8 5.9 -- qcryptographichash.h
    
        enum Algorithm {                        enum Algorithm {
    #ifndef QT_CRYPTOGRAPHICHASH_ONL        #ifndef QT_CRYPTOGRAPHICHASH_ONL
            Md4,                                    Md4,
            Md5,                                    Md5,
    #endif                                  #endif
            Sha1 = 2,                               Sha1 = 2,
    #ifndef QT_CRYPTOGRAPHICHASH_ONL        #ifndef QT_CRYPTOGRAPHICHASH_ONL
            Sha224,                                 Sha224,
            Sha256,                                 Sha256,
            Sha384,                                 Sha384,
            Sha512,                                 Sha512,
            Sha3_224,                  |
            Sha3_256,                  |            Keccak_224 = 7,
            Sha3_384,                  |            Keccak_256,
            Sha3_512                   |            Keccak_384,
                                       >            Keccak_512,
                                       >            RealSha3_224 = 11,
                                       >            RealSha3_256,
                                       >            RealSha3_384,
                                       >            RealSha3_512,
                                       >    #  ifndef QT_SHA3_KECCAK_COMPAT
                                       >            Sha3_224 = RealSha3_224,
                                       >            Sha3_256 = RealSha3_256,
                                       >            Sha3_384 = RealSha3_384,
                                       >            Sha3_512 = RealSha3_512
                                       >    #  else
                                       >            Sha3_224 = Keccak_224,
                                       >            Sha3_256 = Keccak_256,
                                       >            Sha3_384 = Keccak_384,
                                       >            Sha3_512 = Keccak_512
                                       >    #  endif
    #endif                                  #endif
        };                                      };
    

    QT\ u SHA3\ u KECCAK\ u COMPAT公司 只有在 5.9