|
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() |