Private Key Tools

十六进制私钥 → 全部格式、地址与 WIF

总计算器:粘贴一个 64 位十六进制私钥,一次得到这个数字的全部表示形式(十进制、256 位二进制、Base64、ASCII)、两种 WIF、两种公钥序列化、secp256k1 上的点、两个 hash160 值、主网全部五类地址,以及对应的测试网地址。

64 位十六进制 = 32 字节 = 256 位,数值必须落在 [1, n−1] 区间。允许 0x 前缀、空格、冒号和大写字母;长度不足会自动左补 0(正因如此,丢掉一个前导零非常危险)。
还没有输入

请在上方输入内容后点击「转换」。不知道填什么?点「填入示例」即可载入占位符里的演示数据。

技术原理详解

本页计算了什么

这是整套工具的总计算器。你给它一个 256 位整数 —— 私钥 k —— 它就给出这个整数的全部标准表示形式、两种 WIF 字符串、两种公钥序列化、背后的椭圆曲线点、两个 hash160 承诺值,以及十个地址(主网 5 个、测试网 5 个)。

P = k · G  (secp256k1 上)    1 ≤ k ≤ n − 1
256 位整数 k→ 点 P = k·G→ 序列化(33 或 65 字节)→ SHA-256→ RIPEMD-160→ hash160(20 字节)→ Base58Check / Bech32→ 地址

本页一切都只是 k 的纯函数。没有种子、没有口令、没有服务器状态、没有任何网络请求。 两个人输入同样的 64 位十六进制数,在任何计算机上、任何时候得到的都是逐字节相同的结果。

1. 私钥:一个数字,多种写法

私钥不是文件、不是字符串、也不是一团随机字节。它是一个整数(标量),区分两把私钥的唯一 依据就是它的数值大小。你怎么把这个数字写下来,属于表示形式问题,而不是「不同的私钥」:

表示形式演示私钥长什么样它为什么存在
十六进制(64 位) 0824c314…07a171ca 一字节两位,字节边界一眼可见。链上分析、区块浏览器、bitcoin-cli 显示的都是它。
十进制(76 位) 3683455675284633286911943861444039993120875154046227415438637967083965608394 人类说「一个数字」时指的就是它。适合做算术和范围检查,但完全看不出字节结构。
二进制(256 位) 00001000 00100100 11000011 … 一个字符对应一个比特。只有用它,「到底哪一位决定了哪个地址」才能靠眼睛回答。
Base64(44 字符) CCTDFHcrLChZyIlHE5Cja/ZuU6HKFkL5bw8skwehcco= 同样 32 字节原始数据的紧凑文本形式。某些钱包把二进制私钥当文本导出时用它;它不是 WIF。
WIF(51 或 52 字符) KwVYL77Lcs1ckM39NvGjrtfKhU4KKdR2iB9Wq2FSMN6rbGK5tVqG 0x80 ‖ k ‖ [0x01] 的 Base58Check。真正往钱包里粘贴的格式,额外带网络字节与压缩标志,纯 hex 私钥没有这些。
ASCII 视图 \x08$\xc3\x14w+,(Y\xc8\x89… 把这 32 字节强行当文本文件读出来会看到什么。几乎全是不可打印字符 —— 这正是私钥从不以「文本」形式保存的原因。

由于上面这些指的都是同一个数字,hex 与十进制之间的转换是无损、可逆的。而 Base64 和 WIF 混入了第二种 成分(原始字节,或者字节加版本号加校验和),所以它们不是「另一种进制」—— 详见第 4 节。

2. 为什么正好是 256 位,以及为什么 k 不能是 0 或 n

secp256k1 定义在 256 位素域上,由 G 生成的群是阶为 n 的循环群。于是出现三条 硬边界:

合法私钥:1 ≤ k ≤ n − 1    n = 115792089237316195423570985008687907852837564279074904382605163141518161494337
边界十六进制十进制
最小合法私钥0000…00011
最大合法私钥(n−1)fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140115792089237316195423570985008687907852837564279074904382605163141518161494336
曲线阶 n(非法)fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141115792089237316195423570985008687907852837564279074904382605163141518161494337
2256 − 1(非法,> n)ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff115792089237316195423570985008687907853269984665640564039457584007913129639935

最后两行之间的差额是 432420386565659656852420866394968145598,一个 39 位数。落在这个 区间里的私钥不会表现出任何异常,所以人们往往要等到某个校验器抛错才意识到问题。

一个值得知道的结果

因为 n − 1 ≡ −1 (mod n),私钥 1 与 n − 1 分别对应点 G 与 −G。这两点共享同一个 x 坐标,所以它们的 Taproot 地址 完全相同(bc1pmfr3p9j00pfxjh0zmgp99y8zftmd3s5pmedqhyptwy6lm87hf5sspknck9), 而 P2PKH 地址却截然不同(1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH 对 1GrLCmVQXoyJXaPJQdqssNqwxvha1eUo2E),因为 P2PKH 会把 y 的奇偶前缀一起哈希进去。 这一对私钥把「一个私钥、多个地址」演示得淋漓尽致。

3. 从数字到点:公钥

把生成元 G 乘以 k,得到曲线 y² = x³ + 7 (mod p) 上的点 P = (X, Y),这就是公钥。它有两个坐标,因此有多种序列化方式,而选哪一种会改变之后所有的 地址。

形式排布长度演示值
非压缩04 ‖ X ‖ Y65 字节(130 位 hex)04ff812e26…32b424ae
压缩,Y 为偶02 ‖ X33 字节(66 位 hex)02ff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee80
压缩,Y 为奇03 ‖ X33 字节(66 位 hex)本私钥不适用 —— 它的 Y 是偶数
x-only(BIP340)X32 字节(64 位 hex)ff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee80
X = ff812e26…8c67ee80   Y = 8f49cde1…32b424ae   Y 为偶数 → 前缀 02

压缩是无损的,因为 Y 可以从 X 完整恢复:方程 Y² = X³ + 7 恰好 有两个解 Y 与 p − Y,而它们的奇偶性必然相反。于是只需 1 个比特回答「取哪一个」, 这个比特就是 02/03 前缀。恢复过程有闭式解(因为 p ≡ 3 (mod 4)):Y = (X³ + 7)(p+1)/4 mod p,若奇偶性不符再取负。

4. WIF:带网络标识与校验和的同一个私钥

WIF 意为 Wallet Import Format(钱包导入格式),本质是对一小段载荷做 Base58Check:

压缩:  0x80 ‖ k(32 字节) ‖ 0x01    → 34 字节载荷 → 52 个字符
非压缩:0x80 ‖ k(32 字节)           → 33 字节载荷 → 51 个字符
校验和 = SHA256(SHA256(载荷)) 的前 4 字节,编码前追加在末尾
属性压缩 WIF非压缩 WIF
演示值KwVYL77Lcs1ckM39NvGjrtfKhU4KKdR2iB9Wq2FSMN6rbGK5tVqG5HssbguBnjbaUVZCsH9YuzUG7T4vYQf51iiodi4izdVy6aVNekU
载荷(hex)800824c314…07a171ca01800824c314…07a171ca
载荷长度34 字节33 字节
校验和(hex)3a0a0417b6f3d7f5
首字符K 或 L5
它隐含哪个地址压缩那一组非压缩那一组
压缩标志在 WIF 里,不在私钥里

私钥本身不知道自己「是否压缩」。是结尾那个 01 决定了钱包要哈希哪一种 公钥编码,从而决定它去看哪一个地址。把压缩 WIF 导入钱包,而币其实躺在非压缩 P2PKH 地址上(对演示私钥 来说是 16kR3eiswUY6tmGnxZhwQmW6LAvTLGWG2G),钱包会若无其事地显示余额为零。币并没有丢, 只是钱包哈希的是另外 33 个字节。像本页这样能同时列出五个地址的工具,就是用来把它们找回来的。

5. hash160:20 字节的承诺值

hash160(x) = RIPEMD-160(SHA-256(x))  →  20 字节 = 40 位十六进制

对演示私钥,把中间值也列出来,绝无隐藏:

输入SHA-256(32 字节)RIPEMD-160 = hash160(20 字节)
压缩公钥 02ff812e…ee80 067eb00a0b9864633b020eef374476142daba913c5481ad6a4741cc8ab702617 21f57b6debcfc5b67182dfb4af1641f0a8189012
非压缩公钥 04ff812e…24ae 30c812bb6ef97f95538e2423f944d056d0cefc28021113de143e56d2c9d11900 3f0e966dc089c611a9c1d03bd4f69ea53b0223f9

把公钥先哈希再放进地址,通常有两个理由。第一,缩短地址:20 字节代替 33 或 65 字节。第二,在链上给 公钥前面加一层哈希,于是从未花费过的地址可以一直隐藏自己的公钥 —— 这一点很重要,因为公钥正是 运行 Shor 算法的量子计算机可以直接攻击的对象。代价是 160 位承诺值的抗碰撞强度(约 280) 远低于曲线的 256 位安全强度,但仅靠碰撞并不能让攻击者花掉你的币。

6. 一个私钥,五个地址

五种主网地址类型都由同一个私钥算出。它们不是同一个值的五种编码:它们承诺的是不同的字节, 并且由不同的脚本决定能否花掉。

徽标类型scriptPubKey(花费条件)大小编码演示地址
CP2PKH 压缩 OP_DUP OP_HASH160 <h160(pub_c)> OP_EQUALVERIFY OP_CHECKSIG 25 BBase58Check,版本 0x00 146ZNjH7XTXnMd1ofe3z7CL2i8WM7N2UqT
UP2PKH 非压缩 同一个脚本,但承诺的是 h160(pub_u) 25 BBase58Check,版本 0x00 16kR3eiswUY6tmGnxZhwQmW6LAvTLGWG2G
SP2SH-P2WPKH(嵌套 SegWit) OP_HASH160 <h160(0x0014‖h160(pub_c))> OP_EQUAL 23 BBase58Check,版本 0x05 3DZT76KyKyc5zkzvLugP8umgt4RPY4XPQw
WP2WPKH(原生 SegWit) OP_0 <20 字节 witness 程序 = h160(pub_c)> 22 BBech32,witness v0,hrp bc bc1qy86hkm0telzmvuvzm76279jp7z5p3yqjnaerk6
TP2TR(Taproot,key path) OP_1 <32 字节 x-only 输出公钥> 34 BBech32m,witness v1,hrp bc bc1pmsrhxnvmj8tjxxu9wj69ntvwvhvr28qufyc26tshz3rjj777tx3sh54u63

7. 校验和:防止手滑的最后一道防线

家族校验和演示证据
Base58Check(1…、3…、5…、K…) 编码前追加 4 字节,取 SHA256(SHA256(载荷)) 的前 4 字节 P2PKH 地址载荷 0021f57b6d…a8189012 的校验和为 cbd7667e;P2SH 地址为 acbfef44
Bech32 / Bech32m(bc1q…、bc1p…) 6 个数据字符,由 hrp 扩展加数据做的 BCH 式 polymod 产生;witness v0 用 bech32 常量,v1+ 用 bech32m bc1qy86hkm0telzmvuvzm76279jp7z5p3yqjnaerk6 解出 32 个数据字 y86hkm0telzmvuvzm76279jp7z5p3yqj;Taproot 那个解出 52 个数据字,以 …777tx3s 结尾

Base58Check 只能检错而不能纠错:它能告诉你打错了,但猜不出你本来想打什么。Bech32 还额外禁止大小写混用、限制总长 90 字符 —— 这两条纯粹是为了让抄写错误更容易被发现。

8. 测试网:同一个私钥,不同的前缀

测试网(以及 regtest/signet 用的地址格式)只是版本字节不同,密码学上毫无区别。演示私钥在测试网上:

项目主网测试网
P2PKH 版本字节0x00(地址以 1 开头)0x6f(以 m 或 n 开头)
P2SH 版本字节0x05(以 3 开头)0xc4(以 2 开头)
WIF 版本字节0x80(以 5/K/L 开头)0xef(以 9/c 开头)
Bech32 可读部分bctb
P2PKH(压缩)146ZNjH7XTXnMd1ofe3z7CL2i8WM7N2UqTmicWfnN6LUy38jVRPD2Mw7YMa873zjixGw
P2PKH(非压缩)16kR3eiswUY6tmGnxZhwQmW6LAvTLGWG2GmmGNLhorkVyMfskQg8gKEgiRCAXAGnxeBv
P2SH-P2WPKH3DZT76KyKyc5zkzvLugP8umgt4RPY4XPQw2N57fAqFzwS7SCYdU23JFkrkx6QdZKurmpU
P2WPKHbc1qy86hkm0telzmvuvzm76279jp7z5p3yqjnaerk6tb1qy86hkm0telzmvuvzm76279jp7z5p3yqjemzsdf
P2TRbc1pmsrhxnvmj8tjxxu9wj69ntvwvhvr28qufyc26tshz3rjj777tx3sh54u63tb1pmsrhxnvmj8tjxxu9wj69ntvwvhvr28qufyc26tshz3rjj777tx3squrnq7
WIF(压缩)KwVYL77Lcs1ckM39NvGjrtfKhU4KKdR2iB9Wq2FSMN6rbGK5tVqGcMrXo27C3vhsunWQmL5sEDAPKhMiz5WinDHywShwrUkrr1RkCJ4i
WIF(非压缩)5HssbguBnjbaUVZCsH9YuzUG7T4vYQf51iiodi4izdVy6aVNekU91eWBRijNxfiSZ4VVd3Tnb2Dm7RdhaCGMfakiLRELNF1saLqhym

注意 146ZNjH7… 和 micWfnN6… 承诺的是同一个 20 字节 hash160,只有版本字节 不同。把测试网币发到主网地址会得到一个「看起来很正常」的错误网络地址,不手工重新编码脚本就取不回来。 请把前缀当作付款指令的一部分,而不是装饰。

9. 完整实例演算

下表中每一个值都是本页用示例私钥 0824c314772b2c2859c889471390a36bf66e53a1ca1642f96f0f2c9307a171ca 实际算出来的。点「填入 示例」后,你看到的应该就是这些字符串。

步骤值
k(hex,32 字节)0824c314772b2c2859c889471390a36bf66e53a1ca1642f96f0f2c9307a171ca
k(十进制)3683455675284633286911943861444039993120875154046227415438637967083965608394
k(二进制前两字节)00001000 00100100 —— 4 个前导零比特,256 位中共有 116 个 1
k(Base64)CCTDFHcrLChZyIlHE5Cja/ZuU6HKFkL5bw8skwehcco=
P = k·G 的 Xff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee80
P = k·G 的 Y8f49cde13c7ffd64f1d730bf87a743a578eda4971ddac4a08118160732b424ae
Y 的奇偶性末位 hex 是 e → 偶数 → 压缩前缀 02
压缩公钥02ff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee80
非压缩公钥04ff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee808f49cde13c7ffd64f1d730bf87a743a578eda4971ddac4a08118160732b424ae
hash160(压缩)21f57b6debcfc5b67182dfb4af1641f0a8189012
hash160(非压缩)3f0e966dc089c611a9c1d03bd4f69ea53b0223f9
P2SH 脚本哈希823333d5fd23a83661e8e47629552c4a5bfc8b6e = hash160(0014‖21f57b6d…)
压缩 WIFKwVYL77Lcs1ckM39NvGjrtfKhU4KKdR2iB9Wq2FSMN6rbGK5tVqG
非压缩 WIF5HssbguBnjbaUVZCsH9YuzUG7T4vYQf51iiodi4izdVy6aVNekU
地址 C146ZNjH7XTXnMd1ofe3z7CL2i8WM7N2UqT
地址 U16kR3eiswUY6tmGnxZhwQmW6LAvTLGWG2G
地址 S3DZT76KyKyc5zkzvLugP8umgt4RPY4XPQw
地址 Wbc1qy86hkm0telzmvuvzm76279jp7z5p3yqjnaerk6
地址 Tbc1pmsrhxnvmj8tjxxu9wj69ntvwvhvr28qufyc26tshz3rjj777tx3sh54u63

10. 推导链上的下一步

11. 安全须知

输入到网页里的私钥,就是已经暴露的私钥

尽管本页所有计算都在服务端完成、不写日志、没有对外网络请求,但这个私钥仍然以 URL 参数的形式经过了 HTTP、经过了 Web 服务器的访问日志、也经过了本服务器的内存。绝不要用这类工具(包括本页)处理保护真实 资金的私钥 —— 除非你在自己掌控的离线机器上操作,并且事后彻底删除该私钥。真实私钥的正确工作流是硬件 钱包或气隙签名设备;而这类页面的正确用途,是用一次性测试私钥来学习和验证格式。

12. 常见错误

13. 速查表

项目取值 / 规则
输入十六进制私钥,期望 64 位;接受 0x 前缀、空格,大小写均可
合法范围1 … n−1,n = 0xFFFF…4141
私钥长度256 位 = 32 字节 = 64 位十六进制
公钥长度压缩 33 字节、非压缩 65 字节、x-only 32 字节
一个私钥的地址数量主网 5 个 + 测试网 5 个
地址编码Base58Check(C、U、S)与 Bech32/Bech32m(W、T)
可逆吗表示形式之间可逆;地址反推私钥不可行(ECDLP + 哈希)
可以公开吗地址与公钥可以;WIF、hex、十进制、二进制、Base64 一律不可以