Skip to content

Latest commit

 

History

History
71 lines (49 loc) · 1.92 KB

README.md

File metadata and controls

71 lines (49 loc) · 1.92 KB

Vyper 入门: 23. hash

哈希函数(Hash functions) 是现代密码学和区块链技术中的重要工具。它们使我们能够通过将数据转换为固定长度的字符串(称为哈希)来安全地存储和传输数据。其中 Keccak256 是一种在区块链社区中广受欢迎的哈希函数,在智能合约中常用于数据验证、安全性和效率。

哈希函数的特性:

  • 确定性: 哈希正向运算简单且唯一,反之只能通过暴力破解
  • 高效性: 从输入的消息到哈希的运算高效
  • 雪崩效应: 微小的输入变化导致哈希值大幅变化
  • 抗碰撞性: 不同的输入产生相同的哈希值的概率极低

Vyper 中提供了两种内置的哈希函数: keccak256sha256

keccak256

在以太坊中最常用的哈希函数

语法:

keccak256(_value)→ bytes32
  • value: 需要哈希的值

示例代码:

@view
@external
def keccak(_value: Bytes[100]) -> bytes32:
    return keccak256(_value)
# keccak(b"potato")
0x9e159dfcfe557cc1ca6c716e87af98fdcb94cd8c832386d0429b2b7bec02754f

sha256

Vyper 中另一种常见的哈希函数,提供不同于 keccak256 的哈希算法

语法:

sha256(_value)→ bytes32
  • value: 需要哈希的值

示例代码:

@view
@external
def sha(_value: Bytes[100]) -> bytes32:
    return sha256(_value)
# sha(b"potato")
0xe91c254ad58860a02c788dfb5c1a65d6a8846ab1dc649631c7db16fef4af2dec

哈希函数的实际应用

  • 数据完整性验证: 使用哈希函数验证存储或传输的数据是否未被篡改。
  • 简单的验证合约示例: 创建一个合约,它接受外部数据,计算其哈希值,并允许其他合约或用户验证这些数据的完整性。

总结

本节中,我们介绍了两种哈希函数的使用,需要注意的是,虽然 keccak256sha256 在当前是安全的,但随着计算能力的提高,它们可能会变得不那么安全