Private Key Tools

二进制私钥 → HEX、WIF 与地址

用 256 个 0/1 比特输入私钥 —— 空格、换行、冒号、下划线都会被忽略 —— 看着这些比特重组成字节、HEX 私钥、两种 WIF、两种公钥与全部十个地址。只有在这个视图里,你才能看清哪一个比特做了什么。

最多 256 个 0/1 字符。空格、制表符、换行、冒号、短横线、下划线会先被去掉,所以按字节分组粘贴也没问题。较短的输入会先左补齐到整字节,再补齐到 32 字节 —— 输入 1 得到的就是私钥 1。超过 256 比特会被拒绝。
还没有输入

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

技术原理详解

本页计算了什么

本页接受以原始比特形式给出的私钥 —— 最多 256 个 0/1 字符 —— 并展示每一个比特到底做了什么。空格、制表符、换行、冒号、短横线和下划线都会被忽略,所以你可以按来源的 原始排版直接粘贴。随后这些比特会被重新按字节分组、转成十六进制,并继续完成整条推导。

比特 → 字节(每 8 比特)→ 十六进制(每字节 2 位)→ k → P = k · G → 地址
256 个 0/1 比特→ 去除分隔符→ 左侧补齐到字节边界→ 32 字节 hex 私钥→ WIF + 公钥→ 10 个地址

在整套工具里,只有本页能让你看见哪一个比特决定了哪一个地址 —— 因为二进制是唯一不会 掩盖机器自身运算单位的表示形式。

1. 比特、半字节、字节、字

这些单位很重要,因为本页所有转换其实都是同一串比特的重新分组:

单位大小写法在 256 位私钥中
比特(bit)10 或 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 数字
000000100088
000111100199
001022101010a
001133101111b
010044110012c
010155110113d
011066111014e
011177111115f

注意本页会先在左侧把你输入的内容补齐到字节边界,随后私钥校验再补齐到完整的 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 地址比它承载的程序更长的原因
两条规则可以避免绝大多数字节序 bug

密钥材料(私钥、公钥、用于地址的哈希、种子)是大端序 —— 你看到的就是它本来的样子。共识层序列化 (金额、索引、版本号、长度)是小端序。如果你在推导地址的过程中发现自己正在反转字节,那几乎 一定是出错了;如果你在解析原始交易时发现自己没有反转,那多半也错了。

4. 为什么前导零有意义

在普通算术里 0001 和 1 是同一个数,很多编程语言也会欣然同意。但在序列化的 私钥里,它们不是同一串字节,而字节数由协议固定为 32。因此前导零本身也是数据:它们说明「这把 私钥很小」,丢掉它们会让后面每一个比特整体左移。

私钥(十进制)hex,64 位前导零比特丢掉这些零会怎样
100000000000000000000000000000000000000000000000000000000000000012551 —— 碰巧还是对的,但那只是因为补零又被补回来了
2560000000000000000000000000000000000000000000000000000000000000100247hex 的 100 = 256 …… 而十进制的 100 = 100:用错进制读同一串数字是另一种经典灾难
225580000000000000000000000000000000000000000000000000000000000000000少一个零就减半,地址彻底改变
演示私钥0824c314772b2c2859c889471390a36bf66e53a1ca1642f96f0f2c9307a171ca4824c314… 是另一把 32 字节私钥(首字节会变成 0x82)

演示私钥很好地演示了这个微妙之处:它的前导零字节是 0 个,前导零 比特却是 4 个 —— 因为首字节是 0x08。本页两个数值都会给出,而把 它们搞混正是手打二进制私钥时最常见的错误。

5. 熵、比特平衡与汉明重量

私钥的汉明重量就是它 256 个比特里有多少个是 1。对均匀随机的私钥,每个 比特都是独立的公平硬币,因此重量服从二项分布,其均值与标准差为:

E[重量] = 256 × 0.5 = 128   σ = √(256 × 0.5 × 0.5) = 8

于是约 68% 的随机私钥落在 120–136,99.7% 落在 104–152。演示私钥的重量是 116 —— 比均值低 1.5σ,毫无异常。关键在于你并没有刻意挑选它:一把被刻意做成 「重量平衡」的私钥,其熵不足 256 位,因为你已经把大部分空间排除掉了。

比特图案汉明重量合法私钥?实际状况
全零(256 个 0)0否k = 0 是无穷远点;直接以「Private key 0 is invalid」拒绝
只有最后一位是 11是k = 1;P2PKH 地址为 1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH,早已被所有盯梢者扫空
只有第一位是 11是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−t2256−t约 2(256−t)/2 次点加(Pollard kangaroo),BSGS 还需要额外内存
确切区间 [a, b],宽度 ww约 √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
压缩 WIFKwVYL77Lcs1ckM39NvGjrtfKhU4KKdR2iB9Wq2FSMN6rbGK5tVqG
压缩公钥02ff812e26116a9aa140abe629e7f8a38401653caf925119def59ed3758c67ee80
hash160(压缩)21f57b6debcfc5b67182dfb4af1641f0a8189012
P2PKH(C)146ZNjH7XTXnMd1ofe3z7CL2i8WM7N2UqT
P2SH-P2WPKH(S)3DZT76KyKyc5zkzvLugP8umgt4RPY4XPQw
P2WPKH(W)bc1qy86hkm0telzmvuvzm76279jp7z5p3yqjnaerk6
P2TR(T)bc1pmsrhxnvmj8tjxxu9wj69ntvwvhvr28qufyc26tshz3rjj777tx3sh54u63

这张表里有两点值得记牢。第一,把最后那个 0 比特翻成 1,私钥就变了 1,而 所有派生值 —— 公钥、两个哈希、全部十个地址 —— 都会变得面目全非。在比特币里不存在「差不多是同一把 私钥」这回事。第二,比特的视觉结构(00001000 00100100 …)对地址毫无提示:从比特到地址的 映射被刻意设计成无结构的,这正是阻止攻击者只搜索「看起来漂亮」的私钥、而不搜索整个空间的原因。

8. 推导链上的下一步

9. 安全须知

10. 常见错误

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 ⇄ 十进制无损;私钥 → 地址不可逆