У Solidity есть функция с именем, sha3
и я протестировал ее с пустой строкой ввода. Это не соответствует тому, что производят другие библиотеки sha3. Я вижу контракты, написанные другими, использующими ту же sha3
функцию в Solidity, и их хэши тоже не совпадают. То же самое касается web3.sha3
хэшей Javascript. Почему?
Ethereum использует Keccak-256 вместо стандарта SHA-3 FIPS 202. В библиотеках sha3, которые вы используете, попробуйте поискать возможность указать с помощью Keccak-256.
Для Python см. Получение идентификатора метода «Keccak hash» в Python .
Для Javascript эта библиотека js-sha3 будет включать использование keccak_256
функции вместо sha3_256
.
keccak_256('');
// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
sha3_256('');
// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
Другие:
keccak_256('The quick brown fox jumps over the lazy dog');
// 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15
keccak_256('The quick brown fox jumps over the lazy dog.');
// 578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d
sha3_256('The quick brown fox jumps over the lazy dog');
// 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04
sha3_256('The quick brown fox jumps over the lazy dog.');
// a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d
js-sha3
, единственная разница заключается в прокладке, 0x06
для FIPS202, 0x01
для Keccak-256.keccak()
может разрешить несколько входов внутри смарт-контракта, например keccak256(97, 98, 99)
: Как мы могли бы добиться этого, используя keccak_256(), который вы представляли? @эт♦Расширение этого ответа :
Ethereum использует хеширование Keccak, которое было представлено на конкурс NIST для SHA3. Впоследствии он был выбран победителем в 2012 году, но окончательный стандарт был выпущен только в августе 2015 года.
Ethereum использует Keccak в том виде, в каком он был выбран в 2012 году. Жаль, что некоторые параметры алгоритма были изменены для окончательной спецификации в 2015 году, что сделало его несовместимым с оригиналом.
Большинство онлайн-инструментов реализуют окончательную версию SHA3 2015 года.
Джей Би
эт
Хадсон Джеймсон
эт
Альберт Реншоу