Как поместить это в Python, чтобы он мог зацикливаться случайным образом с маской? - PullRequest
0 голосов
/ 20 июня 2019

Как бы я положил это в 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()

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Код, которым вы поделились, довольно просто преобразовать в 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())
0 голосов
/ 20 июня 2019
import random
min_bound = 0x000000000000000000000000000000000000000000000000000000000000000F
max_bound = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140

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

Вот, пожалуйста!Интересными частями являются

  • random.randint(min, max) - возвращает целое число от минимального до максимального
  • return "{:X}".format(r) - просто преобразует r из целого числа в шестнадцатеричную строку.Строка формата эквивалентна чему-то вроде printf("%X", r) в C ++
...