Dear Sir i can send you
import hashlib
import ecdsa
import random
import multiprocessing
import os
import base58
from multiprocessing import Pool
# === Configuration ===
TARGET_HASH160 = "f6f5431d25bbf7b12e8add9af5e3475c44a0a5b8".lower()
LOWER_BOUND = int("400000000000000000", 16)
UPPER_BOUND = int("7fffffffffffffffff", 16)
CHUNK_SIZE = 100000
MATCH_THRESHOLD = 6
def private_key_to_wif(private_key_hex):
"""Convert a private key in hex to WIF format."""
private_key_bytes = bytes.fromhex(private_key_hex)
extended_key = b"\x80" + private_key_bytes + b"\x01"
checksum = hashlib.sha256(hashlib.sha256(extended_key).digest()).digest()[:4]
final_key = extended_key + checksum
return base58.b58encode(final_key).decode()
def private_key_to_hash160(private_key_hex):
"""Convert a private key in hex to its compressed Hash160."""
private_key_bytes = bytes.fromhex(private_key_hex)
sk = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
public_key = vk.to_string("compressed")
sha256_hash = hashlib.sha256(public_key).digest()
ripemd160 = hashlib.new("ripemd160")
ripemd160.update(sha256_hash)
return ripemd160.hexdigest()
def worker(args):
"""
Worker function to process a range of integers and find matching Hash160s.
Skips private keys starting with 4, 5, 6, or 7 followed by three identical characters.
"""
start, end, target_hash160, threshold = args
results = []
for i in range(start, end + 1):
# Optimized skipping logic using integer operations
if (i >> 252) in [4, 5, 6, 7] and ((i >> 240) & 0xFFF) == ((i >> 240) & 0xF) * 0x111:
continue
priv_hex = f"{i:064x}"
hash160 = private_key_to_hash160(priv_hex)
if hash160.startswith(target_hash160[:threshold]):
wif = private_key_to_wif(priv_hex)
results.append(("partial", priv_hex, wif, hash160))
if hash160 == target_hash160:
wif = private_key_to_wif(priv_hex)
results.append(("full", priv_hex, wif, hash160))
break
return results
def main():
"""Main function to orchestrate the private key search using multiprocessing."""
cpu_count = max(1, int(multiprocessing.cpu_count() * 0.

) # Use 80% of available CPUs
pool = Pool(processes=cpu_count)
total_attempts = 0
iteration = 0
print(f"🔍 Searching for Hash160: {TARGET_HASH160}")
print(f"🔢 Range: {hex(LOWER_BOUND)} to {hex(UPPER_BOUND)}")
print(f"⚙️ Using {cpu_count}/{multiprocessing.cpu_count()} CPUs | Chunk Size: {CHUNK_SIZE}\n")
while True:
iteration += 1
start_int = random.randint(LOWER_BOUND, UPPER_BOUND - CHUNK_SIZE)
end_int = start_int + CHUNK_SIZE - 1
total_attempts += CHUNK_SIZE
print(f"\n🌀 Iteration {iteration}")
print(f"Checking: {hex(start_int)} → {hex(end_int)}")
subrange = CHUNK_SIZE // cpu_count
tasks = []
for i in range(cpu_count):
sub_start = start_int + i * subrange
sub_end = min(start_int + (i + 1) * subrange - 1, end_int)
tasks.append((sub_start, sub_end, TARGET_HASH160, MATCH_THRESHOLD))
results = pool.map(worker, tasks)
stop = False
partial_matches = []
for result_list in results:
for match_type, priv, wif, h160 in result_list:
if match_type == "partial":
print(f"🟡 Partial Match ({MATCH_THRESHOLD} chars): {priv} | {wif} | {h160}")
partial_matches.append(f"Partial Match - Private Key: {priv}, WIF: {wif}, Hash160: {h160}\n")
elif match_type == "full":
print(f"\n✅ FULL MATCH FOUND!")
print(f"Private Key: {priv}")
print(f"WIF: {wif}")
print(f"Hash160: {h160}")
print(f"Total Attempts: {total_attempts}")
with open("full_match.txt", "w") as f:
f.write(f"Private Key: {priv}\nWIF: {wif}\nHash160: {h160}\nAttempts: {total_attempts}\n")
with open("partial_matches.txt", "a") as f:
f.writelines(partial_matches)
f.write(f"\n✅ FULL MATCH - Private Key: {priv}, WIF: {wif}, Hash160: {h160}\n")
stop = True
break
if stop:
break
if partial_matches and not stop:
with open("partial_matches.txt", "a") as f:
f.writelines(partial_matches)
if stop:
print("\n🎉 Match saved to full_match.txt")
pool.close()
pool.join()
break
print("\n🔚 Search stopped.")
if __name__ == "__main__":
main()
Adjust the hexadecimals as you need for the 71 bit is you need to search for other bit keys change the target hash160's also accordingly.
If you find this helpful send me Coffee money on BTC address - 16qw4VqkxSSfKzguDyVzM68jsWw71yEgP4