Keccak and sha-3 are not the same. In 2007, U.S. National Institute of
Standard and Technology (NIST) initiated a competition about SHA-3. In
2012, Keccak team won the competition. From then on, developers
implemented lots of “sha3” solution based on Keccak. However, in 2014,
NIST modified Keccak solution and released FIPS 202, and this updated
proposal becomes official SHA-3 standard on Aug 2015. Many “old”
program still use Keccak, and do not upgrade to official SHA-3
standard.
“old” code based on Keccak does not generate the same hash value as
SHA-3 does. So, if using a “sha3” library, you should be crystal clear
that the library is based on Keccak or based on standard SHA-3. A
simple solution is doing a test for empty input:
SHA-3 standard output is:
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
Many old Keccak-256 outputs are:
c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
from here
The key idea behind SHA-3 is based on unkeyed permutations, as opposed
to other typical hash function constructions that used keyed
permutations. Keccak also does not make use of the Merkle- Damgard
transformation that is commonly used to handle arbitrary-length input
messages in hash functions. A newer approach, called sponge and
squeeze construction, is used in Keccak. It is a random permutation
model. Different variants of SHA-3 have been standardized, such as
SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, and SHAKE256
If you ever used this:
web3.utils.soliditySha3()
eben though name is Sha3 but its actually implemented by keccak256