📜  Solidity 中的哈希是什么?

📅  最后修改于: 2022-05-13 01:55:49.796000             🧑  作者: Mango

Solidity 中的哈希是什么?

加密哈希函数是一种算法,它以任意数量的数据作为输入并生成固定大小的加密文本。即使输入的微小变化也会产生完全不同的输出。

Solidity 提供以下加密功能:

Function

Properties

keccak256(bytes memory) returns (bytes32)Computes the Keccak-256 hash of the input
sha256(bytes memory) returns (bytes32)Computes the SHA-256 hash of the input
ripemd160(bytes memory) returns (bytes20) Compute RIPEMD-160 hash of the input
sha256(bytes memory) returns (bytes32) Computes the SHA-256 hash of the input
ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)Recover the address associated with the public key from 
Elliptic curve signature used for cryptography or return 
Zero if an error occurs. The parameters correspond to ECDSA 
Signature values.

以太坊使用 Keccak 进行散列,这与 SHA_256 相似但不同。对于工作量证明,它使用了一种名为ethash的自定义方案,该方案旨在抗 ASIC。

示例:在下面的示例中,创建了一个智能合约以将字符串作为输入并给出 8 位哈希作为输出。

Solidity
// pragma version
pragma solidity ^0.6.6; 
  
// Creating a contract
contract helloGeeks 
{
    // We want hash to be of 8 digits 
    // hence we store 10^8 which is 
    // used to extract first 8 digits 
    // later by Modulus 
    uint hashDigits = 8;
      
    // Equivalent to 10^8 = 8
    uint hashModulus = 10 ** hashDigits; 
  
    // Function to generate the hash value
    function _generateRandom(string memory _str) 
        public view returns (uint) 
    {
        // "packing" the string into bytes and 
        // then applying the hash function. 
        // This is then typecasted into uint.
        uint random = 
             uint(keccak256(abi.encodePacked(_str)));
               
        // Returning the generated hash value 
        return random % hashModulus;
    }
  
}


输入:

GeeksForGeeks

输出:

哈希值

参考: https://solidity.readthedocs.io/en/v0.7.1/