| import string |
| import md5 |
| from sys import argv |
| |
| def MDPrint(str): |
| outstr = '' |
| for i in str: |
| o = ord(i) |
| outstr = (outstr |
| + string.hexdigits[(o >> 4) & 0xF] |
| + string.hexdigits[o & 0xF]) |
| print outstr, |
| |
| |
| from time import time |
| |
| def makestr(start, end): |
| result = '' |
| for i in range(start, end + 1): |
| result = result + chr(i) |
| |
| return result |
| |
| |
| def MDTimeTrial(): |
| TEST_BLOCK_SIZE = 1000 |
| TEST_BLOCKS = 10000 |
| |
| TEST_BYTES = TEST_BLOCK_SIZE * TEST_BLOCKS |
| |
| # initialize test data, need temporary string filler |
| |
| filsiz = 1 << 8 |
| filler = makestr(0, filsiz-1) |
| data = filler * (TEST_BLOCK_SIZE / filsiz); |
| data = data + filler[:(TEST_BLOCK_SIZE % filsiz)] |
| |
| del filsiz, filler |
| |
| |
| # start timer |
| print 'MD5 time trial. Processing', TEST_BYTES, 'characters...' |
| t1 = time() |
| |
| mdContext = md5.new() |
| |
| for i in range(TEST_BLOCKS): |
| mdContext.update(data) |
| |
| str = mdContext.digest() |
| t2 = time() |
| |
| MDPrint(str) |
| print 'is digest of test input.' |
| print 'Seconds to process test input:', t2 - t1 |
| print 'Characters processed per second:', TEST_BYTES / (t2 - t1) |
| |
| |
| def MDString(str): |
| MDPrint(md5.new(str).digest()) |
| print '"' + str + '"' |
| |
| |
| def MDFile(filename): |
| f = open(filename, 'rb'); |
| mdContext = md5.new() |
| |
| while 1: |
| data = f.read(1024) |
| if not data: |
| break |
| mdContext.update(data) |
| |
| MDPrint(mdContext.digest()) |
| print filename |
| |
| |
| import sys |
| |
| def MDFilter(): |
| mdContext = md5.new() |
| |
| while 1: |
| data = sys.stdin.read(16) |
| if not data: |
| break |
| mdContext.update(data) |
| |
| MDPrint(mdContext.digest()) |
| print |
| |
| |
| def MDTestSuite(): |
| print 'MD5 test suite results:' |
| MDString('') |
| MDString('a') |
| MDString('abc') |
| MDString('message digest') |
| MDString(makestr(ord('a'), ord('z'))) |
| MDString(makestr(ord('A'), ord('Z')) |
| + makestr(ord('a'), ord('z')) |
| + makestr(ord('0'), ord('9'))) |
| MDString((makestr(ord('1'), ord('9')) + '0') * 8) |
| |
| # Contents of file foo are "abc" |
| MDFile('foo') |
| |
| |
| # I don't wanna use getopt(), since I want to use the same i/f... |
| def main(): |
| if len(argv) == 1: |
| MDFilter() |
| for arg in argv[1:]: |
| if arg[:2] == '-s': |
| MDString(arg[2:]) |
| elif arg == '-t': |
| MDTimeTrial() |
| elif arg == '-x': |
| MDTestSuite() |
| else: |
| MDFile(arg) |
| |
| main() |