Калькулятор хеша Keccak-256

Хешируйте текст или сырые байты алгоритмом Keccak-256, который использует Ethereum, и сравнивайте с SHA3-256 и SHA-256. Результат обновляется по мере ввода; первые четыре байта — селектор функции Solidity.

Вычисляется в вашем браузере на JavaScript. Адреса никогда не загружаются и не хранятся.

Что такое Keccak-256?

Keccak-256 — это 256-битная хеш-функция на основе губки (sponge), которую Ethereum использует повсюду: адрес — это последние 20 байт Keccak-256 от публичного ключа, селектор функции — первые 4 байта Keccak-256 от канонической сигнатуры, а топики событий, контрольные суммы EIP-55 и слоты хранилища тоже выводятся из неё. Это исходная версия Keccak, которая отличается от утверждённого NIST стандарта SHA3-256 только байтом дополнения (padding), поэтому для одного и того же входа они дают разные дайджесты.

Типичные применения

Тестовые векторы

ВходKeccak-256
(пусто)0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
abc0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45
Transfer(address,address,uint256)0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Вставьте любое из этих значений, чтобы убедиться в корректности реализации, прежде чем на неё полагаться.

Keccak-256, SHA3-256 и SHA-256

ФункцияСемействоДополнение / конструкцияГде используется
Keccak-256Губка Keccak, скорость 1088 битpad10*1 с доменным байтом 0x01Ethereum, Tron (TVM), все EVM-сети
SHA3-256Губка Keccak, скорость 1088 битpad10*1 с доменным байтом 0x06 (FIPS 202)Приложения NIST, некоторые не-EVM сети
SHA-256Меркла–Дамгора (SHA-2)дополнение длиной, блоки по 512 битBitcoin, txID в Tron, TLS, Base58Check

Наглядный пример: SHA3-256 от abc в библиотеке FIPS 202 возвращает 0x3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532, а Keccak-256 от тех же трёх байт — значение 0x4e03657a… из таблицы выше. Если значение из контракта или обозревателя не совпадает с вашей библиотекой, первым делом проверьте байт дополнения.

Часто задаваемые вопросы

Keccak-256 — это то же самое, что SHA3-256?

Нет. Ethereum принял Keccak до того, как NIST утвердил SHA-3, а в финальном стандарте изменился байт дополнения (0x01 у Keccak, 0x06 у SHA3). Для одного и того же входа они дают разный результат, поэтому web3-библиотеки называют функцию keccak256, а не sha3. Эта страница показывает оба значения, чтобы разница была видна.

Для чего Ethereum использует Keccak-256?

Для вывода адресов из публичных ключей (последние 20 байт хеша), селекторов функций и топиков событий (хеш сигнатуры), контрольных сумм EIP-55, вычисления слотов хранилища для mapping, узлов Merkle-Patricia trie, а также хешей блоков и транзакций.

Что хешировать: текст или hex?

Выбирайте текст UTF-8 для сигнатур и обычных строк. Выбирайте hex, когда у вас сырые байты, например несжатый публичный ключ или ABI-кодированные данные; префикс 0x необязателен. Хеш текста "0xabcd" и хеш байтов 0xabcd — разные результаты.

Хеш вычисляется на вашем сервере?

Нет. Keccak, SHA3 и SHA-256 реализованы на JavaScript на этой странице и выполняются в вашем браузере. После загрузки страница не делает сетевых запросов.

Чему равен Keccak-256 пустой строки?

0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470. Это значение постоянно встречается в Ethereum: это хеш кода любого аккаунта без кода, поэтому обозреватели показывают его для обычных кошельков.

Можно ли здесь проверить значение для Bitcoin?

SHA-256 включён, так что данные можно хешировать один раз. Двойной SHA-256 и RIPEMD-160, используемые в Bitcoin, как отдельные результаты не выводятся, но валидатор Bitcoin-адресов выполняет их внутри при проверке адресов.