From ee805ff6423d627551210d1085b328d0581e5e2a Mon Sep 17 00:00:00 2001 From: Colin Davis Date: Tue, 5 Jul 2011 17:27:40 -0400 Subject: [PATCH] md5bits --- static/images/out.png | Bin 17669 -> 16701 bytes .../generate-roboto.py | 0 tests/md5bits.py | 21 ++++++++++++++++++ webfront.py | 2 +- 4 files changed, 22 insertions(+), 1 deletion(-) rename generate-roboto.py => tests/generate-roboto.py (100%) create mode 100644 tests/md5bits.py diff --git a/static/images/out.png b/static/images/out.png index 519031ed06fd43397c88d182700f5cd80bde6afb..f0ebe322e7e97b2e8e4ba1139847b95cfa09877e 100644 GIT binary patch literal 16701 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 K(zTN2VgC<_!Ug#N literal 17669 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 diff --git a/generate-roboto.py b/tests/generate-roboto.py similarity index 100% rename from generate-roboto.py rename to tests/generate-roboto.py diff --git a/tests/md5bits.py b/tests/md5bits.py new file mode 100644 index 0000000..672d269 --- /dev/null +++ b/tests/md5bits.py @@ -0,0 +1,21 @@ +import hashlib +import pprint + +numblocks = 5 +blockcount = 10 + +hash = hashlib.sha512() +hash.update("This is my not-yethashed text") +hexdigest = hash.hexdigest() + +hashes = [] +for i in range(0,numblocks): + #Get 1/numblocks of the hash + blocksize = (len(hexdigest) / numblocks) + currentstart = (1 + i) * blocksize - blocksize + currentend = (1 +i) * blocksize + hashes.append(int(hash.hexdigest()[currentstart:currentend],16)) + +pprint.pprint(hashes) +for h in hashes: + print h % 10 diff --git a/webfront.py b/webfront.py index b46a258..e3bc393 100755 --- a/webfront.py +++ b/webfront.py @@ -51,7 +51,7 @@ class MainHandler(tornado.web.RequestHandler): for png in hashlist: img = Image.open(png) robohash.paste(img,(0,0),img) - robohash.save("/opt/robohash/static/images/out.png") + robohash.save("static/images/out.png") self.write("Running in Random mode:
") self.write("")