Skip to content

Commit

Permalink
Create Hash运算.md
Browse files Browse the repository at this point in the history
  • Loading branch information
tanZiWen authored Oct 22, 2024
1 parent 0c4b324 commit 910da10
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions Hash运算.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
比特币脚本支持多种哈希运算。比特币脚本是一种基于堆栈的编程语言,它提供了一些操作码(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)
```bash
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)
```bash
<Signature> <PublicKey>
```

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

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

0 comments on commit 910da10

Please sign in to comment.