fork download
  1. import random, hashlib, sys
  2.  
  3.  
  4. N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
  5. B58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
  6.  
  7. def gen_priv():
  8. while True:
  9. k = random.getrandbits(256)
  10. if 0 < k < N:
  11. return k
  12.  
  13. def to_hex32(k): return format(k, '064x')
  14. def to_bin256(k): return format(k, '0256b')
  15.  
  16. def base58_encode(b: bytes):
  17. num = int.from_bytes(b, 'big')
  18. if num == 0:
  19.  
  20. return '1' * len(b)
  21. s = ""
  22. while num > 0:
  23. num, r = divmod(num, 58)
  24. s = B58[r] + s
  25.  
  26. n_pad = 0
  27. for x in b:
  28. if x == 0:
  29. n_pad += 1
  30. else:
  31. break
  32. return '1'*n_pad + s
  33.  
  34. def base58check(payload: bytes):
  35. chk = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
  36. return base58_encode(payload + chk)
  37.  
  38. def wif_from_int(k, compressed=True):
  39. p = b'\x80' + k.to_bytes(32, 'big')
  40. if compressed:
  41. p += b'\x01'
  42. return base58check(p)
  43.  
  44. def main():
  45.  
  46. n = 1
  47. if len(sys.argv) > 1:
  48. try:
  49. n = max(1, int(sys.argv[1]))
  50. except:
  51. n = 1
  52.  
  53. for i in range(n):
  54. priv = gen_priv()
  55. print("=== Key #{} ===".format(i+1))
  56. print("Hex (32 bytes):", to_hex32(priv))
  57. print("Dec:", priv)
  58. print("Bin (256-bit):", to_bin256(priv))
  59. print("WIF (compressed):", wif_from_int(priv, True))
  60. print()
  61.  
  62. if __name__ == "__main__":
  63. main()
  64.  
Success #stdin #stdout 0.11s 17624KB
stdin
98
stdout
=== Key #1 ===
Hex (32 bytes): 8ea0076ae3cd6f67c480e2f0622866e54f67b73c9d66aa9bbe05359772575e94
Dec: 64511171223157544232467524196398473336476554527332773172004691701345484758676
Bin (256-bit): 1000111010100000000001110110101011100011110011010110111101100111110001001000000011100010111100000110001000101000011001101110010101001111011001111011011100111100100111010110011010101010100110111011111000000101001101011001011101110010010101110101111010010100
WIF (compressed): L1zxNS8428NCaomhGzAm2yrY8CPJPAGAJHHbLaCspGVHGHWdGiyZ