Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将其放入python中,以便它可以使用掩码随机循环?_Python_Hex_Ecdsa - Fatal编程技术网

如何将其放入python中,以便它可以使用掩码随机循环?

如何将其放入python中,以便它可以使用掩码随机循环?,python,hex,ecdsa,Python,Hex,Ecdsa,我如何将其放入python中,以便它可以使用掩码前导零循环生成随机数 std::string min = "000000000000000000000000000000000000000000000000000000000000000F"; std::string max = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140"; std::string get_random_ecdsa_key() { whi

我如何将其放入python中,以便它可以使用掩码前导零循环生成随机数

std::string min = "000000000000000000000000000000000000000000000000000000000000000F";
std::string max = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140";
std::string get_random_ecdsa_key() {
   while (true) { 
     std::string s = get_random_hex(64);
     if (s >= min && s < max) {
        return s;
    }
  }
}        



import random

while True: 

   x = random.randint(0xF,0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140)
   print hex (x) [2:66].lower()

您共享的代码转换成Python非常简单。逻辑结构是相同的,只需移植语法即可。唯一的挑战是实现get_random_hex。我不知道它实际上是做什么的,因为你的问题中没有包括这一部分,但我假设它随机生成一个字符串,该字符串有一定的长度,包含十六进制数字

import random

def get_random_hex(n):
    chars = "0123456789ABCDEF"
    return "".join(random.choice(chars) for _ in range(n))

def get_random_ecdsa_key():
    min = "000000000000000000000000000000000000000000000000000000000000000F"
    max = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140"
    while True:
        s = get_random_hex(64)
        if min <= s < max:
            return s

print(get_random_ecdsa_key())
给你!有趣的部分是

random.randintmin,max-返回一个介于min和max之间的整数 return{:X}.formator-将r从整数转换为十六进制字符串。格式字符串相当于C++中的Prtff%x,r等
如果您问我是否可以用零填充结果以确保其长度正好为64个字符,您不需要这样做。我的方法已经包括了零。嗯,是的,它不循环。您的原始代码也不会循环。它返回一个值,就是它。如果它上面没有零,你的意思是我期望结果有20个零,但实际上几乎所有的数字都是非零的,这是预期的行为。只有6%的可能值有一个前导零,只有0.3%的可能值有两个前导零。连续得到20个零的几率大约为1/1208925819614629174706176。如果你问我如何在循环中调用get_random_ecdsa_键,那是正确的:printget_random_ecdsa_键。有关更多信息,请参阅Python教程。如果你问我,如果max和min都有很多前导零,那么这是一种合适的方法吗?不是,因为函数在找到一个在期望范围内的数字之前会生成数万亿个数字。在这种情况下,使用甘地的答案。1-确保也调用函数!将get_random_ecdsa_key添加到文件末尾以运行函数2我不明白示例中的前导零是用于什么。。。如果希望固定宽度的结果始终为64个字符,可以将格式化程序字符串更改为{:064X}0填充结果,64个字符固定宽度,十六进制格式
import random
min_bound = 0x000000000000000000000000000000000000000000000000000000000000000F
max_bound = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140

def get_random_ecdsa_key():
    r = random.randint(min_bound,max_bound)
    return "{:X}".format(r)