Solidity by Example
version 0.8.3

dark mode

Hashing with Keccak256

keccak256 computes the Keccak-256 hash of the input.

Some use cases are:

  • Creating a deterministic unique ID from a input
  • Commit-Reveal scheme
  • Compact cryptographic signature (by signing the hash instead of a larger input)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

contract HashFunction {
    function hash(
        string memory _text,
        uint _num,
        address _addr
    ) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(_text, _num, _addr));

    // Example of hash collision
    // Hash collision can occur when you pass more than one dynamic data type
    // to abi.encodePacked. In such case, you should use abi.encode instead.
    function collision(string memory _text, string memory _anotherText)
        returns (bytes32)
        // encodePacked(AAA, BBB) -> AAABBB
        // encodePacked(AA, ABBB) -> AAABBB
        return keccak256(abi.encodePacked(_text, _anotherText));

contract GuessTheMagicWord {
    bytes32 public answer =

    // Magic word is "Solidity"
    function guess(string memory _word) public view returns (bool) {
        return keccak256(abi.encodePacked(_word)) == answer;

Try on Remix