二进制私钥 → HEX、WIF 与地址
用 256 个 0/1 比特输入私钥 —— 空格、换行、冒号、下划线都会被忽略 —— 看着这些比特重组成字节、HEX 私钥、两种 WIF、两种公钥与全部十个地址。只有在这个视图里,你才能看清哪一个比特做了什么。
请在上方输入内容后点击「转换」。不知道填什么?点「填入示例」即可载入占位符里的演示数据。
本页计算了什么
本页接受以原始比特形式给出的私钥 —— 最多 256 个 0/1 字符 ——
并展示每一个比特到底做了什么。空格、制表符、换行、冒号、短横线和下划线都会被忽略,所以你可以按来源的
原始排版直接粘贴。随后这些比特会被重新按字节分组、转成十六进制,并继续完成整条推导。
在整套工具里,只有本页能让你看见哪一个比特决定了哪一个地址 —— 因为二进制是唯一不会 掩盖机器自身运算单位的表示形式。
1. 比特、半字节、字节、字
这些单位很重要,因为本页所有转换其实都是同一串比特的重新分组:
| 单位 | 大小 | 写法 | 在 256 位私钥中 |
|---|---|---|---|
| 比特(bit) | 1 | 0 或 1 | 共 256 个 |
| 半字节(nibble) | 4 比特 | 一位 hex 数字 0–f | 共 64 位 |
| 字节(octet) | 8 比特 | 两位 hex 数字,如 08 | 共 32 个 |
| 32 位字 | 32 比特 | 8 位 hex 数字 | 共 8 个 |
| 整把私钥 | 256 比特 | 64 位 hex / 32 字节 | 1 个 |
这些关系是精确的、没有余数:8 比特永远是 2 位 hex,4 比特永远是 1 位,而 256 能被它们整除。这正是 十六进制存在于这个领域的唯一原因 —— 它是二进制的无损可读视图,而不是另一套有自己规则的 数字系统。
2. 二进制 → 十六进制:每四位一组
转换按半字节分组完成,全程不需要对整个数字做算术:
for each group of 4 bits (left to right):
value = 8*b3 + 4*b2 + 2*b1 + 1*b0 # 0..15
emit "0123456789abcdef"[value]
把它用在演示私钥的前四个字节上:
bits 0000 1000 0010 0100 1100 0011 0001 0100
hex 0 8 2 4 c 3 1 4
↑
byte 0 = 0x08 · byte 1 = 0x24 · byte 2 = 0xc3 · byte 3 = 0x14
| 4 比特组 | 数值 | hex 数字 | 4 比特组 | 数值 | hex 数字 |
|---|---|---|---|---|---|
0000 | 0 | 0 | 1000 | 8 | 8 |
0001 | 1 | 1 | 1001 | 9 | 9 |
0010 | 2 | 2 | 1010 | 10 | a |
0011 | 3 | 3 | 1011 | 11 | b |
0100 | 4 | 4 | 1100 | 12 | c |
0101 | 5 | 5 | 1101 | 13 | d |
0110 | 6 | 6 | 1110 | 14 | e |
0111 | 7 | 7 | 1111 | 15 | f |
注意本页会先在左侧把你输入的内容补齐到字节边界,随后私钥校验再补齐到完整的 32 字节。因此
输入 1 得到的就是私钥 1 —— 不是 0x10,也不是报错。左边是最高有效
端,这就是比特币密钥材料中所有定宽整数的规则。
3. 大端序与小端序
只有当多字节数值要写成一串字节时,「字节序」才成为一个问题:高位字节在前,还是低位字节在前?比特币 在这方面出了名地不一致,而这种不一致正是互操作性 bug 的头号来源。
| 字段 | 字节序 | 为什么你需要关心 |
|---|---|---|
| 私钥(32 字节)、公钥 X/Y、hash160、Taproot x-only 公钥 | 大端序 | 写出来的 hex 就是数值本身,永远不需要反转。 |
| WIF 载荷、BIP32 扩展密钥材料、BIP39 种子 | 大端序 | 按顺序照抄字节;地址/WIF 的运算依赖这一点。 |
| 交易版本号 | 小端序(int32) | 原始交易的第 1 个字节是版本号的低字节 |
| 交易的输入/输出数量与脚本长度 | VarInt(CompactSize),小端序 | 只有在小数值时才 01 就是「一个输入」;≥ 0xfd 需要前缀 |
| 序列化时的 outpoint 交易 ID | 小端序(与显示顺序相反) | 浏览器显示为 3a1b… 的值,实际存储为 …1b3a |
| 输出金额(聪,int64) | 小端序 | 1 BTC = 100000000 聪,低位字节在前 |
| 区块头的版本、时间戳、bits、nonce | 小端序(uint32) | 挖矿与区块头解析都依赖它 |
| 显示出来的工作量证明区块哈希 | 大端序(与内部哈希相反) | 区块哈希著名的前导零,在内部字节序里是末尾 |
| Bech32 数据字 | 5 比特一组,高位在前 | 8→5 比特的重组,正是 bc1 地址比它承载的程序更长的原因 |
密钥材料(私钥、公钥、用于地址的哈希、种子)是大端序 —— 你看到的就是它本来的样子。共识层序列化 (金额、索引、版本号、长度)是小端序。如果你在推导地址的过程中发现自己正在反转字节,那几乎 一定是出错了;如果你在解析原始交易时发现自己没有反转,那多半也错了。
4. 为什么前导零有意义
在普通算术里 0001 和 1 是同一个数,很多编程语言也会欣然同意。但在序列化的
私钥里,它们不是同一串字节,而字节数由协议固定为 32。因此前导零本身也是数据:它们说明「这把
私钥很小」,丢掉它们会让后面每一个比特整体左移。
| 私钥(十进制) | hex,64 位 | 前导零比特 | 丢掉这些零会怎样 |
|---|---|---|---|
1 | 0000000000000000000000000000000000000000000000000000000000000001 | 255 | 1 —— 碰巧还是对的,但那只是因为补零又被补回来了 |
256 | 0000000000000000000000000000000000000000000000000000000000000100 | 247 | hex 的 100 = 256 …… 而十进制的 100 = 100:用错进制读同一串数字是另一种经典灾难 |
2255 | 8000000000000000000000000000000000000000000000000000000000000000 | 0 | 少一个零就减半,地址彻底改变 |
| 演示私钥 | 0824c314772b2c2859c889471390a36bf66e53a1ca1642f96f0f2c9307a171ca | 4 | 824c314… 是另一把 32 字节私钥(首字节会变成 0x82) |
演示私钥很好地演示了这个微妙之处:它的前导零字节是 0 个,前导零
比特却是 4 个 —— 因为首字节是 0x08。本页两个数值都会给出,而把
它们搞混正是手打二进制私钥时最常见的错误。
5. 熵、比特平衡与汉明重量
私钥的汉明重量就是它 256 个比特里有多少个是 1。对均匀随机的私钥,每个
比特都是独立的公平硬币,因此重量服从二项分布,其均值与标准差为:
于是约 68% 的随机私钥落在 120–136,99.7% 落在 104–152。演示私钥的重量是
116 —— 比均值低 1.5σ,毫无异常。关键在于你并没有刻意挑选它:一把被刻意做成
「重量平衡」的私钥,其熵不足 256 位,因为你已经把大部分空间排除掉了。
| 比特图案 | 汉明重量 | 合法私钥? | 实际状况 |
|---|---|---|---|
全零(256 个 0) | 0 | 否 | k = 0 是无穷远点;直接以「Private key 0 is invalid」拒绝 |
只有最后一位是 1 | 1 | 是 | k = 1;P2PKH 地址为 1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH,早已被所有盯梢者扫空 |
只有第一位是 1 | 1 | 是 | k = 2255 = 57896044618658097711785492504343953926634992332820282019728792003956564819968,地址 18h7RmwXCTYX69z9S2Hc9gs8ET7SUN7YG5 —— 「大」不等于「强」 |
| 演示私钥 | 116 | 是 | 与随机不可区分 |
全一(256 个 1) | 256 | 否 | 2256−1 超过曲线阶 n;被拒绝 |
偶尔有人通过翻转比特把私钥「改进」到恰好一半是 1。这实际上是在摧毁熵:恰好含 128 个 1 的 256 位
字符串共有 C(256,128) ≈ 2251.6 个,也就是说「平衡私钥」的空间比整个空间小约 20
倍 —— 更重要的是,猜到你会这么做的攻击者可以完全跳过所有不平衡的私钥。唯一正确的构造是来自 CSPRNG
的均匀随机数;任何人类「调整」都是缩减。
6. 搜索程序如何利用已知的比特图案
对满 256 位的私钥做暴力搜索毫无希望:2256 个候选。搜索程序从不攻击随机私钥,
它们攻击的是形状已知的私钥。常见的有三种形状,而它们在私钥的二进制表示里全都看得见:
| 关于私钥已知的信息 | 候选空间 | 最优通用算法的代价 |
|---|---|---|
| 什么都不知道(均匀随机的 256 位私钥) | 2256 | 约 2128 次群运算(Pollard rho)—— 不可行 |
高 t 位是零,即 k < 2256−t | 2256−t | 约 2(256−t)/2 次点加(Pollard kangaroo),BSGS 还需要额外内存 |
确切区间 [a, b],宽度 w | w | 约 √w 次点加 —— 这就是区间私钥(「谜题」私钥)最先倒下的原因 |
低 t 位是零,即 k 是 2t 的倍数 | 2256−t | 先整体除以 2t,代价与 kangaroo 相同 |
| 人类可辨认的图案(重复字节、计数器、日期) | 小到你不敢想象 | 字典/枚举:几秒到几小时 |
具体地说:如果已知高 128 位是零,剩下 2128 个候选,代价约
264 次点加 —— 今天仍然不可企及。如果已知高 200 位是零,剩下
256 个候选,约 228 ≈ 2.68 亿次点加:一块 GPU 几分钟的
事。这就是那些著名「谜题」地址被如此迅速清空的真实原因 —— 它们的私钥已知很小,所以搜索是在一个区间上
进行,而不是在整个空间里。
任何缩小搜索空间的规则 —— 「是 256 位,但只有最后 64 位有意义」「它是某个著名常量」「我按了 1 再 按了四十个 0」—— 都会把你的安全强度从 256 位降到这个规则剩下的那点。而且由于比特币地址是公开且可被 永久监视的,攻击者甚至不需要绝对速度快:只需要比你花得更快。用图案构造出来的私钥,会在入账的同一个 区块里被扫走。
7. 实例演算
下面这 256 个比特就是演示私钥,表中每一个 hex、WIF 与地址值都由本页实时算出:
| 步骤 | 值 |
|---|---|
| 比特(256 位中的前 64 位) | 00001000 00100100 11000011 00010100 01110111 00101011 00101100 00101000 |
| 比特长度/字节长度 | 256 比特 / 32 字节 / 64 位十六进制 |
| 汉明重量(1 的个数) | 116(均值 128、σ 8 → 低 1.5σ) |
| 前导零比特/末尾零比特 | 4 / 1 |
| HEX 私钥 | 0824c314772b2c2859c889471390a36bf66e53a1ca1642f96f0f2c9307a171ca |
| 十进制 | 3683455675284633286911943861444039993120875154046227415438637967083965608394 |
| 压缩 WIF | KwVYL77Lcs1ckM39NvGjrtfKhU4KKdR2iB9Wq2FSMN6rbGK5tVqG |
| 压缩公钥 | 02ff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee80 |
| hash160(压缩) | 21f57b6debcfc5b67182dfb4af1641f0a8189012 |
| P2PKH(C) | 146ZNjH7XTXnMd1ofe3z7CL2i8WM7N2UqT |
| P2SH-P2WPKH(S) | 3DZT76KyKyc5zkzvLugP8umgt4RPY4XPQw |
| P2WPKH(W) | bc1qy86hkm0telzmvuvzm76279jp7z5p3yqjnaerk6 |
| P2TR(T) | bc1pmsrhxnvmj8tjxxu9wj69ntvwvhvr28qufyc26tshz3rjj777tx3sh54u63 |
这张表里有两点值得记牢。第一,把最后那个 0 比特翻成 1,私钥就变了 1,而
所有派生值 —— 公钥、两个哈希、全部十个地址 —— 都会变得面目全非。在比特币里不存在「差不多是同一把
私钥」这回事。第二,比特的视觉结构(00001000 00100100 …)对地址毫无提示:从比特到地址的
映射被刻意设计成无结构的,这正是阻止攻击者只搜索「看起来漂亮」的私钥、而不搜索整个空间的原因。
8. 推导链上的下一步
- 十六进制私钥 → 全部结果 —— 总计算器,十个地址一屏看完。
- 十进制私钥 —— 同一个私钥写成一个巨大整数。
- Base64 私钥 —— 针对把原始字节当文本导出的钱包。
- 私钥 → 压缩公钥 —— 比特变成曲线点的地方。
- BIP39 助记词 → BIP32 子私钥 —— 安全的私钥究竟如何生成,而不是 靠手打比特。
9. 安全须知
- 二进制是手工处理时最危险的表示形式。少一个或多一个
0,它之后的全部 内容都会位移;没有任何校验和,也没有任何结构能让你察觉。如果必须在机器之间搬运私钥,请用带校验和的 WIF,而不是比特串。 - 只能复制粘贴,绝不手抄。256 个字符远超人类可靠转写的极限;靠猜的话每个字符都有 一半的概率是错的。
- 本页是教学工具。它不做私钥生成、不是钱包、也不存储任何东西。你在这里输入的私钥, 从输入的那一刻起就应该被视为已公开。
- 「优化比特图案」等于自残。固定前缀、重复半字节、低重量、整数 —— 全都是第 6 节那些 算法的头等目标。
- 熵在比特里是看不出来的。一把二进制看起来极其随机的私钥,也可能就是
SHA256("hunter2")。目测什么都证明不了,只有生成过程能证明。
10. 常见错误
- 输入 255 或 257 个比特。前者会被补齐、后者会被拒绝,两种情况的处理方式都会改变 私钥。请数清字符数,或者直接看本页报告的比特长度。
- 在右侧补零而不是左侧。比特按高位在前书写;在右边加
0等于乘以 2, 在左边加0什么都不会改变。 - 把比特读反了。密钥材料使用大端序;反转之后会得到另一把合法私钥、另一个地址。
- 以为全零是「弱私钥」而不是非法私钥。它会被直接拒绝:
0 · G没有坐标。 - 以为全一是「最强私钥」。
2256−1大于曲线阶,同样会被拒绝。 - 数长度时把比特和字节搞混。「256」两者都不是;私钥是 256 比特、32 字节、64 位 hex。
- 以为二进制视图是另一把私钥。它是同一个整数,只是本页的输入格式不同。
11. 速查表
| 项目 | 取值 / 规则 |
|---|---|
| 输入 | 1–256 个 0/1 字符;空格、换行、冒号、短横线、下划线会被忽略 |
| 会被拒绝的输入 | 任何其它字符(Not a valid binary string),或超过 256 比特(Binary input exceeds 256 bits) |
| 过短的输入 | 先左补齐到字节边界,再补齐到 32 字节 —— 输入 1 就是私钥 1 |
| 合法私钥范围 | 1 … n−1;全零与全一都非法 |
| 期望汉明重量 | 随机私钥为 128 ± 8(演示私钥:116) |
| 密钥材料的字节序 | 大端序(最高有效字节在前) |
| 共识数据的字节序 | 小端序(金额、索引、版本号、长度) |
| 可逆吗 | 比特 ⇄ hex ⇄ 十进制无损;私钥 → 地址不可逆 |