QCryptographicHash :: Sha3_256 отличается в Qt5.4 и Qt5.8 - PullRequest
0 голосов
/ 05 октября 2018

Я использую функцию QCryptographicHash::hash(data, QCryptographicHash::Sha3_256).toHex() для кодирования пароля 123456 И получаю два разных результата:

Qt5.4: c888c9ce9e098d5864d3ded6ebcc140a12142263bace3a23a36f9905f12bd64a 
Qt5.8: d7190eb194ff9494625514b6d178c87f99c5973e28c398969d2233f2960a573e

В документах Qt сказано:

Примечание: В Qtверсии до 5.9, когда QCryptographicHash попросили сгенерировать хеш-сумму SHA3, фактически вычислил Keccak.Если вам нужна совместимость с хешами SHA-3, созданными этими версиями Qt, используйте перечислители Keccak_.В качестве альтернативы, если требуется совместимость с источниками, определите макрос QT_SHA3_KECCAK_COMPAT.

Но я использую источники Qt5.8 из ветви github 5.8!Не 5.9.Что я делаю не так?

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете использовать онлайн-инструмент, такой как этот , чтобы вычислить хэш SHA3_256 вашего пароля, и аналогичным образом этот , чтобы вычислить хеш Keccak-256.Он показывает точные результаты, которые вы отобразили в своем вопросе.

Так что Замечание Мартена кажется правильным: поведение, записанное в этой документации, было в какой-то момент введено в ветку 5.8.Вы можете сами убедиться в истории git файла qcryptographichash.cpp в ветке под названием 5.8, где это произошло.Вы также можете видеть, что это было сделано после применения тега v5.8.0 .

Так что если вы вернетесь к версии, помеченной как v5.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_SHA3_KECCAK_COMPAT имеет значение только в 5.9.

...