123 lines · 2.5 KB · Python
RawDownload
import stringimport md5from 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()