【发布时间】:2021-11-09 19:12:21
【问题描述】:
我在比特币中使用 -13 作为私钥,但私钥无效。如何使用 Bitcoinj 或 java 从 -13 或任何其他负数中获取正私钥并生成相同的地址?
val params = MainNetParams.get()
val b = BigInteger("-13")
val key = ECKey.fromPrivate(b, false)
println(LegacyAddress.fromKey(params, key)) // 122Vo9PeKd4j8zSGBeQHdmks6GnkpycXNz
【问题讨论】:
-
简短回答:取整数 mod 基点生成的组的顺序。更简短的答案:添加
0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141。 -
我不明白数学。它适用于每个负数还是仅适用于-13?能否请您提供 Java 代码?
-
首先,完全不清楚为什么你甚至有一个负数开头。但它适用于任何整数。
b.mod(new BigInteger("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", 16));应该会给你你所寻求的答案,如果我理解正确的话。 -
这些神奇的常数取自SECG paper, section 2.7.1
-
这些是对数字组的操作,它们映射到诸如 [0..N) 之类的范围。所以说 N = 17 然后 -13 相当于 4 作为
-13 mod 17 = 4。 James 刚刚发布了一个 稍微大一点的值 N,特定于 BitCoin 使用的曲线 seck256r1:P
标签: java cryptography bitcoin private-key bitcoinj