Solidity hat eine Funktion namens sha3
und ich habe sie mit einer leeren Zeichenfolgeneingabe getestet. Es stimmt nicht mit dem überein, was andere sha3-Bibliotheken produzieren. Ich sehe Verträge, die von anderen mit der gleichen sha3
Funktion in Solidity geschrieben wurden, und ihre Hashes stimmen ebenfalls nicht überein. Dasselbe gilt für Javascript- web3.sha3
Hashes. Wieso den?
Ethereum verwendet Keccak-256 anstelle des SHA-3 FIPS 202-Standards. Versuchen Sie in den von Ihnen verwendeten sha3-Bibliotheken nach der Option zum Angeben mit Keccak-256 zu suchen.
Für Python siehe Abrufen der Methoden-ID "Keccak Hash" in Python
Für Javascript würde diese Bibliothek js-sha3 die Verwendung der keccak_256
Funktion anstelle von beinhalten sha3_256
.
keccak_256('');
// c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
sha3_256('');
// a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
Andere:
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
besteht der einzige Unterschied in der Polsterung 0x06
für FIPS202 0x01
für Keccak-256.keccak()
kann mehrere Eingaben innerhalb des Smart Contracts zulassen als: keccak256(97, 98, 99)
. Wie könnten wir dies mit keccak_256() erreichen, das Sie dargestellt haben? @eth♦Erweiterung dieser Antwort :
Ethereum verwendet Keccak-Hashing, das beim NIST-Wettbewerb für SHA3 eingereicht wurde. Anschließend wurde es 2012 als Gewinner ausgewählt, aber der endgültige Standard wurde erst im August 2015 veröffentlicht.
Ethereum verwendet Keccak in seiner Form, wie es 2012 ausgewählt wurde. Schade, dass einige Parameter des Algorithmus für die endgültige Spezifikation im Jahr 2015 optimiert wurden, wodurch es mit dem Original inkompatibel wurde.
Die meisten Online-Tools implementieren die endgültige Version 2015 von SHA3.
JB
eth
Hudson Jameson
eth
Albert Renshaw