【发布时间】:2023-01-02 16:37:57
【问题描述】:
我正在开发一个在比特币地址中发现部分冲突的程序。 我已经获得了 urandom 的源代码,但不知道从哪里开始。 所以我想从 /dev/urandom 中获取总共长度为 32(包括掩码 0)的随机字节,因为我的程序需要 256 位,但在转换为十六进制时在开头用零掩码。
十六进制输出将是这样的
000000000000000000000000000000000000000000000000000000000000002d4
注意实际十六进制值之前的 0(这就是我所说的掩码),在 python 中,许多库都需要它来获取比特币地址。
我在我的代码中(不是在 random.c 中)尝试了以下内容但无济于事,现在我认为修改 urandom 本身可能更有帮助。
static bool init_rand(void *data, size_t size)
{
unsigned char mask = 0x0000000000000000000000;
FILE *stream = open("/dev/urandom","r");
if(stream= NULL)
return false;
bool ok = (fread(data=(mask<<9) + data,9,size,stream) == size);
fclose(stream);
return ok;
}
这会产生编译和分段错误,我无法减轻这种错误,因为我不是 C 程序员。
有关完整代码,请参阅 GitHub 上的 Pairgen。
是否可以修改 Linux 内核驱动程序中的 random.c 以生成已经用 0 屏蔽的字节?
【问题讨论】:
-
你认为
unsigned char有多大? -
使困惑。你说你想要“长度为 32 的随机字节”,但是给出一个 65 个半字节长的样本......你是说 32.5 个随机字节吗? (如果你任意改变它们,那将不再是随机的。)
-
@fe203 我想要总共长度为 32 的字节(24 个零和 8 个随机)
-
对不起,0s 是否以字节为单位
标签: c random byte bitcoin puzzle