Solidity 中的哈希是什么?
加密哈希函数是一种算法,它以任意数量的数据作为输入并生成固定大小的加密文本。即使输入的微小变化也会产生完全不同的输出。
Solidity 提供以下加密功能: Function Propertieskeccak256(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/