Do you want to recompile it yourself? You'd need to change the generator point or to make it easier add an option to manually input G, then you can use the public key of e.g, 237, if you want to have a stride jump of 237 at every step.
It was the Bitcointalk forum that inspired us to create Bitcointalksearch.org - Bitcointalk is an excellent site that should be the default page for anybody dealing in cryptocurrency, since it is a virtual gold-mine of data. However, our experience and user feedback led us create our site; Bitcointalk's search is slow, and difficult to get the results you need, because you need to log in first to find anything useful - furthermore, there are rate limiters for their search functionality.
The aim of our project is to create a faster website that yields more results and faster without having to create an account and eliminate the need to log in - your personal data, therefore, will never be in jeopardy since we are not asking for any of your data and you don't need to provide them to use our site with all of its capabilities.
We created this website with the sole purpose of users being able to search quickly and efficiently in the field of cryptocurrency so they will have access to the latest and most accurate information and thereby assisting the crypto-community at large.
print("Glass sound (indicating script completion)")
subprocess.run(["afplay", "/System/Library/Sounds/glass.aiff"])
import subprocess
import time
import os
from decimal import Decimal
import base58
import hashlib
import ecdsa
# Function to clear the terminal screen
def clear_terminal():
subprocess.call('clear', shell=True)
# Function to convert a decimal number to a compressed Bitcoin address
def decimal_to_compressed_address(decimal_number):
private_key = int(decimal_number).to_bytes(32, byteorder='big')
signing_key = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1, hashfunc=hashlib.sha256)
verifying_key = signing_key.verifying_key
compressed_public_key = verifying_key.to_string("compressed")
hashed_string = hashlib.sha256(compressed_public_key).digest()
ripemd_string = hashlib.new('ripemd160', hashed_string).digest()
ripemd_string = b'\x00' + ripemd_string
hashed_string = hashlib.sha256(ripemd_string).digest()
hashed_string = hashlib.sha256(hashed_string).digest()
checksum = hashed_string[:4]
address = ripemd_string + checksum
base58_address = base58.b58encode(address)
return base58_address.decode()
# Function to convert a decimal number to a private key in hexadecimal format
def decimal_to_private_key_hex(decimal_number):
private_key_bytes = int(decimal_number).to_bytes(32, byteorder='big')
private_key_hex = private_key_bytes.hex()
private_key_hex_flipped = private_key_hex.replace('2', '3', 2)
return private_key_hex, private_key_hex_flipped
# Function to check if a target address is found
def check_target_address(address, decimal_number, private_key_hex):
if address in target_addresses:
target_addresses_found.append(address)
print(f"Target address found: {address}")
print(f"Decimal Number: {decimal_number}")
print(f"Private Key Hex: {private_key_hex}")
# Write the found address to the file add to found addresses.txt
with open("found_addresses.txt", "a") as found_file:
found_file.write(f"Target address found: {address}\n")
found_file.write(f"Decimal Number: {decimal_number}\n")
found_file.write(f"Private Key Hex: {private_key_hex}\n\n")
found_file.flush() # Flush the buffer to ensure data is written immediately
return True
return False
# List of target Bitcoin addresses to search for
target_addresses = ['13zb1hQbWVsc2S7ZTZnP2G4undNNpdh5so', '1BY8GQbnueYofwSuFAT3USAhGjPrkxDdW9', '1MVDYgVaSN6iKKEsbzRUAYFrYJadLYZvvZ', '19vkiEajfhuZ8bs8Zu2jgmC6oqZbWqhxhG', '1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU']
# List of additional hex numbers to modify the decimal number
additional_hex_numbers = ['3','4','5','6','7','8', '9', 'a', 'b', 'c', 'd', 'e', 'f','10','11','12','13','14','15','16','17','18','19','1a', '1b', '1c','1d', '1e', '1f'
,'40','41','42','43','44','45','46','47','48','49','4a', '4b', '4c','4d', '4e', '4f' ,'50','51','52','53','54','55','56','57','58','59','5a', '5b', '5c','5d', '5e', '5f' ,'60','61','62','63','64','65','66','67','68','69','6a', '6b', '6c','6d', '6e', '6f' ,'70','71','72','73','74','75','76','77','78','79','7a', '7b', '7c','7d', '7e', '7f' ]
# Define the lower and upper bounds for the decimal number search range
lower_bound = Decimal('37000000000000000000')
upper_bound = Decimal('55340232221128654832')
target_addresses_found = []
# Initialize time and iteration tracking variables
start_time = time.time()
total_iterations = 0
# Function to search for target addresses within a specified range
def search_decimal_range(decimal_number, upper_bound):
global total_iterations # Use the global variable
iterations = 0
update_interval = 1
step_size = 100000000000000 # Initial step size
while decimal_number <= upper_bound:
compressed_address = decimal_to_compressed_address(decimal_number)
private_key_hex, flipped_private_key_hex = decimal_to_private_key_hex(decimal_number)
if check_target_address(compressed_address, decimal_number, private_key_hex):
return True # Stop the loop if a match is found
found_match = False
additional_addresses = []
for hex_number in additional_hex_numbers:
modified_decimal_number = int(hex(int(decimal_number))[2:].replace('2', hex_number, 1), 16)
modified_compressed_address = decimal_to_compressed_address(modified_decimal_number)
additional_addresses.append(modified_compressed_address)
if check_target_address(modified_compressed_address, modified_decimal_number, private_key_hex):
found_match = True
break
if found_match:
return True
if len(target_addresses_found) == len(target_addresses):
return True
if iterations % update_interval == 0:
elapsed_time = time.time() - start_time
iterations_per_second = iterations / elapsed_time
print(f"Reached {iterations} iterations.")
print(f"Elapsed Time: {elapsed_time:.2f} seconds")
print(f"Iterations per Second: {iterations_per_second:.2f}")
print(f"Decimal Number: {decimal_number}")
print(f"Compressed Bitcoin Address: {compressed_address}")
print(f"Private Key Hex: {private_key_hex}")
if target_addresses_found:
print_addresses_side_by_side(target_addresses_found[-1], decimal_number, private_key_hex, additional_addresses)
print("\n")
if iterations % 100000 == 0:
clear_terminal()
decimal_number += step_size # Increase the decimal number by the current step size
iterations += 1
# Adjust the step size dynamically based on the search space
if iterations % 1000 == 0:
step_size *= 2 # Double the step size every 1 million iterations
# Function to print the target address and additional addresses side by side
def print_addresses_side_by_side(target_address, decimal_number, private_key_hex, additional_addresses):
print(f"Decimal Number: {decimal_number}")
print(f"Target Address: {target_address}")
print(f"Private Key Hex: {private_key_hex}")
for i, address in enumerate(additional_addresses):
print(f" ({additional_hex_numbers[i]}): {address}")
print("\n")
# Function to continuously search for target addresses in the specified range
def continuous_search(lower_bound, upper_bound):
global total_iterations, start_time # Use the global variables
current_decimal = lower_bound
while True:
elapsed_time = time.time() - start_time
total_iterations += 1
if search_decimal_range(current_decimal, upper_bound):
print("All target addresses found. Restarting search...")
time.sleep(0) # Optional: Add a delay before restarting the search
current_decimal = lower_bound # Reset the current_decimal to the lower_bound
else:
current_decimal += 1 # Increment by 1
# Start the continuous search
while True:
continuous_search(lower_bound, upper_bound)
# Add sound notification when the script completes
print("Glass sound (indicating script completion)")
subprocess.run(["afplay", "/System/Library/Sounds/glass.aiff"])
sudo apt install libssl-dev
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// Function to convert a byte vector to a hexadecimal string
std::string bytesToHex(const std::vector& bytes) {
std::stringstream ss;
for (unsigned char byte : bytes) {
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast(byte);
}
return ss.str();
}
// Function to calculate the RIPEMD160 hash of a byte vector
std::vectorcalculateRIPEMD160(const std::vector & data) {
std::vectorhash(RIPEMD160_DIGEST_LENGTH);
RIPEMD160(data.data(), data.size(), hash.data());
return hash;
}
int main() {
// Initialize the OpenSSL library
if (OpenSSL_add_all_algorithms() != 1) {
std::cerr << "OpenSSL initialization failed." << std::endl;
return 1;
}
// Set the target Hash160 value (replace with your target hash)
std::string target_hash160_hex = "fe7c45126731f7384640b0b0045fd40bac72e2a2";
int puzzle = 15; // The puzzle number (Bits)
// Clear the console
std::system("clear");
std::cout << "\r\033[01;33m[+] Bytea HASH160 Search by NoMachine" << "\n";
time_t currentTime = std::time(nullptr);
std::cout << "\r\033[01;33m[+] " << std::ctime(¤tTime) << "\r";
std::cout << "\r\033[01;33m[+] Puzzle: " << puzzle << "\033[0m" << std::endl;
std::cout.flush();
// Calculate the maximum bytes value based on the puzzle
BIGNUM* limit_int = BN_new();
BN_set_word(limit_int, 1);
BN_lshift(limit_int, limit_int, puzzle);
BN_sub_word(limit_int, 1);
int max_bytes = (BN_num_bits(limit_int) + 7) / 8;
// Create an EC_KEY object
EC_KEY* ec_key = EC_KEY_new_by_curve_name(NID_secp256k1);
// Calculate the SHA-256 hash of the public key
unsigned char sha256_result[SHA256_DIGEST_LENGTH];
// Calculate the RIPEMD160 hash of the SHA-256 hash
std::vectorripemd160_result(RIPEMD160_DIGEST_LENGTH);
while (true) {
// Create a 32-byte private key with 32 zeros followed by random bytes
std::vectorprivate_key_bytes(32, 0);
// Generate random bytes for the remaining part of the private key
std::vectorrandom_bytes(max_bytes);
if (RAND_bytes(random_bytes.data(), random_bytes.size()) != 1) {
std::cerr << "Error generating random bytes." << std::endl;
BN_free(limit_int);
EC_KEY_free(ec_key);
return 1;
}
// Append the random bytes to the private key
std::copy(random_bytes.begin(), random_bytes.end(), private_key_bytes.begin() + 32 - max_bytes);
// Create a BIGNUM from the private key bytes
BIGNUM* bn_private_key = BN_bin2bn(private_key_bytes.data(), private_key_bytes.size(), NULL);
// Set the private key in the EC_KEY object
EC_KEY_set_private_key(ec_key, bn_private_key);
// Compute the public key from the private key
EC_POINT* public_key_point = EC_POINT_new(EC_KEY_get0_group(ec_key));
EC_POINT_mul(EC_KEY_get0_group(ec_key), public_key_point, bn_private_key, NULL, NULL, NULL);
// Convert the public key point to binary representation (compressed)
size_t public_key_length = EC_POINT_point2oct(EC_KEY_get0_group(ec_key), public_key_point, POINT_CONVERSION_COMPRESSED, NULL, 0, NULL);
std::vectorpublic_key_bytes(public_key_length);
EC_POINT_point2oct(EC_KEY_get0_group(ec_key), public_key_point, POINT_CONVERSION_COMPRESSED, public_key_bytes.data(), public_key_length, NULL);
SHA256(public_key_bytes.data(), public_key_bytes.size(), sha256_result);
ripemd160_result = calculateRIPEMD160(std::vector(sha256_result, sha256_result + SHA256_DIGEST_LENGTH));
// Convert the calculated RIPEMD160 hash to a hexadecimal string
std::string calculated_hash160_hex = bytesToHex(ripemd160_result);
// Display the generated public key hash (Hash160) and private key
std::string message = "\r\033[01;33m[+] Public Key Hash (Hash 160): " + calculated_hash160_hex;
std::cout << message << "\e[?25l";
std::cout.flush();
// Check if the generated public key hash matches the target
if (calculated_hash160_hex == target_hash160_hex) {
// Get the current time
std::time_t currentTime;
std::time(¤tTime);
std::tm tmStruct = *std::localtime(¤tTime);
// Format the current time into a human-readable string
std::stringstream timeStringStream;
timeStringStream << std::put_time(&tmStruct, "%Y-%m-%d %H:%M:%S");
std::string formattedTime = timeStringStream.str();
std::cout << "\n\033[32m[+] PUZZLE SOLVED: " << formattedTime << "\033[0m" << std::endl;
std::cout << "\r\033[32m[+] Target Public Key Hash (Hash160) found! Private Key: " << bytesToHex(private_key_bytes) << std::endl;
// Append the private key information to a file if it matches
std::ofstream file("KEYFOUNDKEYFOUND.txt", std::ios::app);
if (file.is_open()) {
file << "\nPUZZLE SOLVED " << formattedTime;
file << "\nPrivate Key (hex): " << bytesToHex(private_key_bytes);
file << "\n--------------------------------------------------------------------------------------------------------------------------------------------";
file.close();
}
break;
}
}
// Free the EC_KEY and BIGNUM objects
BN_free(limit_int);
EC_KEY_free(ec_key);
return 0;
}
g++ -o puzzle puzzle.cpp -lssl -lcrypto -m64 -mssse3 -O3
./puzzle
from bit import Key
import ecdsa
import binascii
from ecdsa.curves import SECP256k1
import threading
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
curve = ecdsa.SECP256k1.curve
results = []
def add(P1, P2):
x1, y1 = P1
x2, y2 = P2
if P1 == P2:
lam = (3 * x1 * x1) * pow(2 * y1, -1, p)
else:
lam = (y2 - y1) * pow(x2 - x1, -1, p)
x3 = (lam * lam - x1 - x2) % p
y3 = (lam * (x1 - x3) - y1) % p
return (x3, y3)
def dbl(K):
x,y = K
P = ecdsa.ellipticcurve.Point(curve, x, y)
k_dbl = 2 * P
return (k_dbl.x(),k_dbl.y())
def mul(k,P):
x,y = P
point = ecdsa.ellipticcurve.Point(curve, x,y)
r_p = point * k
return (r_p.x(),r_p.y())
def revDbl(K,n):
return mul((n+1)//2,K)
def sub(K,G,n):
neg_G = (G[0], -G[1])
sub_K = add(K,neg_G)
return sub_K
def unCmp(pub):
cmp_pub = binascii.unhexlify(pub)
cmp_vk = ecdsa.VerifyingKey.from_string(cmp_pub, curve=ecdsa.SECP256k1)
uncmp_pub = cmp_vk.to_string(encoding="uncompressed")
uncmp_pub_hex = binascii.hexlify(uncmp_pub).decode('utf-8')
uncmp_pub_hex = uncmp_pub_hex[2:]
x = int(uncmp_pub_hex[:64],16)
y = int(uncmp_pub_hex[64:],16)
return (x,y)
def is_point_on_curve(point):
x, y = point
lhs = (y * y) % p
rhs = (x * x * x + 7) % p
return lhs == rhs
def runRev(K, bin_str, bits_num):
hx = 0
if len(bin_str) != 0:
hx = hex(int(bin_str,2))
print(len(bin_str), bin_str, hx, sep="\t")
global results
if len(results) > 0:
return
else:
if len(bin_str) <= bits_num:
# Rev DBL + ADD
r_sub = sub(K,G,n)
da_k = revDbl(r_sub,n)
da_bin_str = "1" + bin_str
if da_k == G:
print("KEY FOUND", hx)
results.append(da_bin_str)
return
elif is_point_on_curve(da_k):
runRev(da_k, da_bin_str,bits_num)
else:
print("NOT ON CURVE")
# Rev DBL
d_k = revDbl(K,n)
d_bin_str = "0"+bin_str
if d_k == G:
results.append(d_bin_str)
return
elif is_point_on_curve(d_k):
runRev(d_k, d_bin_str,bits_num)
else:
print("NOT ON CURVE")
else:
return
def main():
global results
pub = "03633cbe3ec02b9401c5effa144c5b4d22f87940259634858fc7e59b1c09937852"
K = unCmp(pub)
bits_num = 130
bin_str = ''
runRev(K, bin_str, bits_num)
if len(results) > 0:
print("KEY FOUND",results)
if __name__ == "__main__":
main()
from bit import Key
import ecdsa
import binascii
from ecdsa.curves import SECP256k1
import threading
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
curve = ecdsa.SECP256k1.curve
results = []
def add(P1, P2):
x1, y1 = P1
x2, y2 = P2
if P1 == P2:
lam = (3 * x1 * x1) * pow(2 * y1, -1, p)
else:
lam = (y2 - y1) * pow(x2 - x1, -1, p)
x3 = (lam * lam - x1 - x2) % p
y3 = (lam * (x1 - x3) - y1) % p
return (x3, y3)
def dbl(K):
x,y = K
P = ecdsa.ellipticcurve.Point(curve, x, y)
k_dbl = 2 * P
return (k_dbl.x(),k_dbl.y())
def mul(k,P):
x,y = P
point = ecdsa.ellipticcurve.Point(curve, x,y)
r_p = point * k
return (r_p.x(),r_p.y())
def revDbl(K,n):
return mul((n+1)//2,K)
def sub(K,G,n):
neg_G = (G[0], -G[1])
sub_K = add(K,neg_G)
return sub_K
def unCmp(pub):
cmp_pub = binascii.unhexlify(pub)
cmp_vk = ecdsa.VerifyingKey.from_string(cmp_pub, curve=ecdsa.SECP256k1)
uncmp_pub = cmp_vk.to_string(encoding="uncompressed")
uncmp_pub_hex = binascii.hexlify(uncmp_pub).decode('utf-8')
uncmp_pub_hex = uncmp_pub_hex[2:]
x = int(uncmp_pub_hex[:64],16)
y = int(uncmp_pub_hex[64:],16)
return (x,y)
def is_point_on_curve(point):
x, y = point
lhs = (y * y) % p
rhs = (x * x * x + 7) % p
return lhs == rhs
def runRev(K, bin_str, bits_num):
hx = 0
if len(bin_str) != 0:
hx = hex(int(bin_str,2))
print(len(bin_str), bin_str, hx, sep="\t")
global results
if len(results) > 0:
return
else:
if len(bin_str) <= bits_num:
# Rev DBL + ADD
r_sub = sub(K,G,n)
da_k = revDbl(r_sub,n)
da_bin_str = "1" + bin_str
if da_k == G:
print("KEY FOUND", hx)
results.append(da_bin_str)
return
elif is_point_on_curve(da_k):
runRev(da_k, da_bin_str,bits_num)
else:
print("NOT ON CURVE")
# Rev DBL
d_k = revDbl(K,n)
d_bin_str = "0"+bin_str
if d_k == G:
results.append(d_bin_str)
return
elif is_point_on_curve(d_k):
runRev(d_k, d_bin_str,bits_num)
else:
print("NOT ON CURVE")
else:
return
def main():
global results
pub = "03633cbe3ec02b9401c5effa144c5b4d22f87940259634858fc7e59b1c09937852"
K = unCmp(pub)
bits_num = 130
bin_str = ''
runRev(K, bin_str, bits_num)
if len(results) > 0:
print("KEY FOUND",results)
if __name__ == "__main__":
main()
from bit import Key
import ecdsa
import binascii
from ecdsa.curves import SECP256k1
import threading
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)
curve = ecdsa.SECP256k1.curve
results = []
def add(P1, P2):
x1, y1 = P1
x2, y2 = P2
if P1 == P2:
lam = (3 * x1 * x1) * pow(2 * y1, -1, p)
else:
lam = (y2 - y1) * pow(x2 - x1, -1, p)
x3 = (lam * lam - x1 - x2) % p
y3 = (lam * (x1 - x3) - y1) % p
return (x3, y3)
def dbl(K):
x,y = K
P = ecdsa.ellipticcurve.Point(curve, x, y)
k_dbl = 2 * P
return (k_dbl.x(),k_dbl.y())
def mul(k,P):
x,y = P
point = ecdsa.ellipticcurve.Point(curve, x,y)
r_p = point * k
return (r_p.x(),r_p.y())
def revDbl(K,n):
return mul((n+1)//2,K)
def sub(K,G,n):
neg_G = (G[0], -G[1])
sub_K = add(K,neg_G)
return sub_K
def unCmp(pub):
cmp_pub = binascii.unhexlify(pub)
cmp_vk = ecdsa.VerifyingKey.from_string(cmp_pub, curve=ecdsa.SECP256k1)
uncmp_pub = cmp_vk.to_string(encoding="uncompressed")
uncmp_pub_hex = binascii.hexlify(uncmp_pub).decode('utf-8')
uncmp_pub_hex = uncmp_pub_hex[2:]
x = int(uncmp_pub_hex[:64],16)
y = int(uncmp_pub_hex[64:],16)
return (x,y)
def is_point_on_curve(point):
x, y = point
lhs = (y * y) % p
rhs = (x * x * x + 7) % p
return lhs == rhs
def runRev(K, bin_str, bits_num):
hx = 0
if len(bin_str) != 0:
hx = hex(int(bin_str,2))
print(len(bin_str), bin_str, hx, sep="\t")
global results
if len(results) > 0:
return
else:
if len(bin_str) <= bits_num:
# Rev DBL + ADD
r_sub = sub(K,G,n)
da_k = revDbl(r_sub,n)
da_bin_str = "1" + bin_str
if da_k == G:
print("KEY FOUND", hx)
results.append(da_bin_str)
return
elif is_point_on_curve(da_k):
runRev(da_k, da_bin_str,bits_num)
else:
print("NOT ON CURVE")
# Rev DBL
d_k = revDbl(K,n)
d_bin_str = "0"+bin_str
if d_k == G:
results.append(d_bin_str)
return
elif is_point_on_curve(d_k):
runRev(d_k, d_bin_str,bits_num)
else:
print("NOT ON CURVE")
else:
return
def main():
global results
pub = "03633cbe3ec02b9401c5effa144c5b4d22f87940259634858fc7e59b1c09937852"
K = unCmp(pub)
bits_num = 130
bin_str = ''
runRev(K, bin_str, bits_num)
if len(results) > 0:
print("KEY FOUND",results)
if __name__ == "__main__":
main()
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
0xcdf15ce5b341762d