我想制作像ethersecret.org这样的网站
如何从头到尾生成所有可能的私钥。 (0-9,A-F)
我尝试了几种方法,但我不能这样做。
然后我将这个私钥转换为公共地址。 Mssql数据库足够用于此记录吗?
答案 0 :(得分:4)
比特币(标签)私钥是256位;这意味着有115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936个不同的可能值。这就是你的行数。
不,您无法存储所有可能的值。
对于背景,构成我们星球的原子数是 :
100,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
所以...你需要存储大约1.15千万亿行每个原子来实现这一目标。
答案 1 :(得分:3)
你链接的网站基本上是个玩笑。有2 ^ 256个可能的私钥,当然你不能存储它们,但是你可以列出"列出"它们都是一页一页而不存储。
假设您有1.000.000个数字(从1到百万),并且您希望列出页面大小为50的数字。您会怎么做?一个选项是将它们存储在数据库中,但没有理由,因为您可以使用以下内容计算在给定页面(pageNumber
)上显示的数字:
var pageNumber = 1;
int pageSize = 50;
var first = pageSize * (pageNumber - 1) + 1; // 1-based, not 0-based
for (int i = first; i < first + pageSize; i++)
{
Console.WriteLine(i);
}
这是该网站的作用。您选择一个页面,它会列出有限数量(25个)的连续&#34;私钥&#34;为此&#34;页面&#34;。对于每个这样的密钥,它计算公钥(地址)并进行余额查询。
请注意,要在C#中处理如此大的数字(最多2 ^ 256),int
或long
类型是不够的,但有BigInteger
类型,这是有能力的这样做。
以下是如何为页码4364908475194633198041869980357565399892975134476500473255880896656920733874
提供相同的(针对上述网站)结果using System;
using System.Numerics;
namespace ConsoleApp8 {
class Program {
static void Main(string[] args) {
var pageNumber = BigInteger.Parse("4364908475194633198041869980357565399892975134476500473255880896656920733874");
const int pageSize = 25;
var first = pageSize * (pageNumber - 1) + 1; // 1-based, not 0-based
for (BigInteger i = first; i < first + pageSize; i++)
{
Console.WriteLine(i.ToString("x"));
}
}
}
}