Created
February 16, 2014 16:07
-
-
Save EmilStenstrom/9036533 to your computer and use it in GitHub Desktop.
Competing in the hash|challenge to find the lowest SHA512 hash: http://www.h11e.com/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import hashlib | |
from random import random | |
from multiprocessing import Process, Array | |
from ctypes import c_char | |
CPU_CORES = 4 | |
def new_candidate(prev_hash, seed): | |
return prev_hash[:32] + seed | |
def find_lower(lowest, seed): | |
# Use previous hash as import for next hash to avoid generating random strings | |
# "seed" makes sure processes are working on different namespaces | |
candidate = new_candidate(lowest.value, seed) | |
while True: | |
current_hash = hashlib.sha512(candidate).hexdigest() | |
if current_hash < lowest.value: | |
lowest.value = current_hash | |
print candidate, "->", current_hash | |
candidate = new_candidate(current_hash, seed) | |
def main(): | |
lowest = Array(c_char, 128, lock=False) | |
# Seed with random value so restarts don't search the same sequences | |
candidate = str(random()) | |
lowest.value = hashlib.sha512(candidate).hexdigest() | |
print candidate, "->", lowest.value | |
processes = [Process(target=find_lower, args=(lowest, str(seed))) for seed in range(CPU_CORES)] | |
for process in processes: | |
process.start() | |
for process in processes: | |
process.join() | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment