Skip to content

Latest commit

 

History

History
41 lines (30 loc) · 2.15 KB

Hash运算.md

File metadata and controls

41 lines (30 loc) · 2.15 KB

比特币脚本支持多种哈希运算。比特币脚本是一种基于堆栈的编程语言,它提供了一些操作码(opcode)用于处理哈希运算。以下是比特币脚本中常用的哈希运算指令:

  1. OP_HASH160

    • 计算数据的 RIPEMD-160(SHA-256(data))。也就是先对数据执行 SHA-256,然后将结果作为输入执行 RIPEMD-160。这个操作通常用于生成比特币地址(P2PKH 和 P2SH 地址)。
    • 堆栈操作<data> -> <hash160>
  2. OP_SHA256

    • 计算数据的 SHA-256 哈希。SHA-256 是一种广泛使用的哈希算法,它输出 256 位(32 字节)的哈希值。
    • 堆栈操作<data> -> <sha256 hash>
  3. OP_SHA1

    • 计算数据的 SHA-1 哈希。虽然 SHA-1 在某些场景下已被认为不再足够安全,但它仍然可以用于一些特定用途。
    • 堆栈操作<data> -> <sha1 hash>
  4. OP_RIPEMD160

    • 计算数据的 RIPEMD-160 哈希。RIPEMD-160 是一种输出 160 位(20 字节)哈希值的算法,比特币地址格式(例如 P2PKH 地址)依赖此算法。
    • 堆栈操作<data> -> <ripemd160 hash>

示例:比特币支付脚本中使用哈希运算

以下是一个常见的 Pay-to-PubKey-Hash(P2PKH)交易脚本,它使用了 OP_HASH160 指令:

锁定脚本(ScriptPubKey)

OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
  1. OP_DUP:复制堆栈上的公钥。
  2. OP_HASH160:对公钥进行 SHA-256 和 RIPEMD-160 的双重哈希运算,生成公钥哈希(PubKeyHash)。
  3. OP_EQUALVERIFY:验证计算出的哈希值是否等于给定的 PubKeyHash
  4. OP_CHECKSIG:验证签名是否有效。

解锁脚本(ScriptSig)

<Signature> <PublicKey>

解锁脚本提供了签名和公钥,脚本会先验证公钥对应的哈希是否匹配,然后验证签名的合法性。

总结

比特币脚本支持多种哈希运算,主要用于验证数据的完整性和确保交易的正确性。最常见的哈希运算是 OP_HASH160,用于生成比特币地址,并在 P2PKH 和 P2SH 类型的交易中应用。