Skip to content

Latest commit

 

History

History
96 lines (67 loc) · 2.96 KB

哈希.md

File metadata and controls

96 lines (67 loc) · 2.96 KB

哈希

Solidity By Example 是一个学习 Solidity 编程语言的网站。本页面介绍了哈希函数以及如何在 Solidity 中使用它们。

什么是哈希?

哈希函数将任意长度的数据转换为固定长度的输出,该输出称为哈希值。哈希函数具有以下属性:

  • 输入相同,则输出始终相同。
  • 输入略微不同,则输出完全不同。
  • 不可能从哈希值推断出输入数据。
  • 不可能更改哈希值,而不改变输入数据。

哈希函数用于保护密码、数字签名和加密货币等应用程序的安全性。

常见的哈希函数

keccak256

keccak256 是一种 SHA3 变体,用于 Solidity 中的哈希值计算。它将任意长度的输入转换为 256 位哈希值。以下是 Solidity 中 keccak256 的示例用法:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HashExample {
    function hash(string memory _text) public pure returns (bytes32) {
        return keccak256(abi.encode(_text));
    }
}

sha256

SHA-256 是另一种流行的哈希函数,通常用于比特币和其他加密货币中。它将任意长度的输入转换为 256 位哈希值。以下是 Solidity 中 sha256 的示例用法:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HashExample {
    function hash(string memory _text) public pure returns (bytes32) {
        return sha256(abi.encode(_text));
    }
}

ripemd160

RIPEMD-160 是另一种常见的哈希函数,通常用于比特币和其他加密货币中。它将任意长度的输入转换为 160 位哈希值。以下是 Solidity 中 ripemd160 的示例用法:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HashExample {
    function hash(string memory _text) public pure returns (bytes20) {
        return ripemd160(abi.encode(_text));
    }
}

示例

以下是使用 keccak256 哈希函数在 Solidity 中实现简单密码保护的示例:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract PasswordProtected {
    bytes32 private passwordHash;

    event PasswordSet(bytes32 passwordHash);

    constructor() {
        passwordHash = keccak256(abi.encodePacked("myPassword123"));
    }

    function setPassword(string memory _password) public {
        passwordHash = keccak256(abi.encodePacked(_password));
        emit PasswordSet(passwordHash);
    }

    function checkPassword(string memory _password) view public returns(bool) {
        bytes32 hashedPassword = keccak256(abi.encodePacked(_password));
        return hashedPassword == passwordHash;
    }
}

以上示例代码实现了一个简单的密码保护合约,允许用户设置密码并检查密码是否正确。

结论

哈希函数是保护密码、数字签名和加密货币等应用程序安全的重要组件。使用 Solidity 中提供的 keccak256、sha256 和 ripemd160 函数,可以在以太坊智能合约中安全地计算哈希值。