mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00

svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r82351 | brian.curtin | 2010-06-28 19:14:28 -0500 (Mon, 28 Jun 2010) | 3 lines Update md5driver.py for 3.x. Changed an import, replaced md5.new() with md5(), and added an encode where needed. ........
122 lines
2.5 KiB
Python
Executable file
122 lines
2.5 KiB
Python
Executable file
from hashlib import md5
|
|
import string
|
|
from sys import argv
|
|
|
|
def MDPrint(str):
|
|
outstr = ''
|
|
for o in str:
|
|
outstr = (outstr
|
|
+ string.hexdigits[(o >> 4) & 0xF]
|
|
+ string.hexdigits[o & 0xF])
|
|
print(outstr, end=' ')
|
|
|
|
|
|
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()
|
|
|
|
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(str.encode("utf-8")).digest())
|
|
print('"' + str + '"')
|
|
|
|
|
|
def MDFile(filename):
|
|
f = open(filename, 'rb')
|
|
mdContext = md5()
|
|
|
|
while 1:
|
|
data = f.read(1024)
|
|
if not data:
|
|
break
|
|
mdContext.update(data)
|
|
|
|
MDPrint(mdContext.digest())
|
|
print(filename)
|
|
|
|
|
|
import sys
|
|
|
|
def MDFilter():
|
|
mdContext = md5()
|
|
|
|
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()
|