我得到這樣一個代碼段:QCryptographicHash - 現實中的SHA3是什麼?
void SHAPresenter::hashData(QString data)
{
QCryptographicHash* newHash = new QCryptographicHash(QCryptographicHash::Sha3_224);
newHash->addData(data.toUtf8());
QByteArray hashResultByteArray = newHash->result();
setHashedData(QString(hashResultByteArray.toHex()));
delete newHash;
}
根據Qt spec,QCryptographicHash :: Sha3_224應 「生成SHA3-224散列和Qt中引入5.1」。我想將該代碼的結果與其他源進行比較,以檢查我是否以正確的方式放置數據。我發現網站:https://emn178.github.io/online-tools/sha3_224.html 所以我們在這兩種情況下都有SHA3_224。問題是,首先會生成「測試」這樣的字節串:
3be30a9ff64f34a5861116c5198987ad780165f8366e67aff4760b5e
而第二個:
3797bf0afbbfca4a7bbba7602a2b552746876517a7f9b7ce2db0ae7b
不相似的。但也有認爲這樣做「Keccak-224」網站: https://emn178.github.io/online-tools/keccak_224.html
這裏的結果是:
3be30a9ff64f34a5861116c5198987ad780165f8366e67aff4760b5e
我知道SHA3基於Keccak的功能 - 但這裏有什麼問題?這兩種實現中的哪一種遵循NIST FIPS 202的正確方式,我們如何知道這一點?
問題是,SHA3是改性Keccak。 Qt似乎在計算Keccak,而不是SHA3。好吧。 https://bugreports.qt.io/browse/QTBUG-59770 – peppe
如果您在標準正式接受之前創建代碼並將其命名爲SHA-3,那麼這就是您所得到的結果。作者應該已經實現Keccac +版本號而不是「SHA-3」。也許他們應該將它的實現「NSSHA」重命名爲Non-Standard-Secure-Hash-Algorithm「:P –
那麼,它可以安全地重命名爲Keccak,因爲它就是這樣做的,但它肯定不能被稱爲SHA3。 – peppe