�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!md5driver.py000064400000004722152527255410007034 0ustar00import 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() md5driver.pyc000064400000006377152527255410007207 0ustar00ó ¿œ^c@s—ddlZddlZddlmZd„ZddlmZd„Zd„Zd„Zd„Z ddlZd „Z d „Z d „Z e ƒdS( iÿÿÿÿN(targvcCsSd}xB|D]:}t|ƒ}|tj|d?d@tj|d@}q W|GdS(Ntii(tordtstringt hexdigits(tstrtoutstrtito((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDPrints   ,(ttimecCs8d}x+t||dƒD]}|t|ƒ}qW|S(NRi(trangetchr(tstarttendtresultR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmakestrsc Csád}d}||}d }td|dƒ}|||}|||| }~~dG|GdGHtƒ}tjƒ}x!t|ƒD]}|j|ƒq„W|jƒ} tƒ} t| ƒdGHd G| |GHd G|| |GHdS( Nièi'iiisMD5 time trial. Processings characters...sis digest of test input.sSeconds to process test input:s Characters processed per second:i(RR tmd5tnewR tupdatetdigestR ( tTEST_BLOCK_SIZEt TEST_BLOCKSt TEST_BYTEStfilsiztfillertdatatt1t mdContextRRtt2((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyt MDTimeTrials&        cCs*ttj|ƒjƒƒd|dGHdS(Nt"(R RRR(R((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDString;scCsat|dƒ}tjƒ}x*|jdƒ}|s7Pn|j|ƒqWt|jƒƒ|GHdS(Ntrbi(topenRRtreadRR R(tfilenametfRR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFile@s cCsQtjƒ}x-tjjdƒ}|s+Pn|j|ƒqWt|jƒƒHdS(Ni(RRtsyststdinR#RR R(RR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFilterPs cCsÒdGHtdƒtdƒtdƒtdƒtttdƒtdƒƒƒtttdƒtdƒƒttdƒtdƒƒttd ƒtd ƒƒƒtttd ƒtd ƒƒd d ƒtd ƒdS(NsMD5 test suite results:Rtatabcsmessage digesttztAtZt0t9t1itfoo(R RRR&(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyt MDTestSuite]s    N'cCsŒttƒdkrtƒnxitdD]]}|d dkrNt|dƒq'|dkrdtƒq'|dkrztƒq't|ƒq'WdS(Niis-ss-ts-x(tlenRR)R RR3R&(targ((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmainns     ( RRR'RR R RRR R&R)R3R6(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyts     "     README000064400000000665152527255410005443 0ustar00This is the Python version of the MD5 test program from the MD5 Internet Draft (Rivest and Dusse, The MD5 Message-Digest Algorithm, 10 July 1991). The file "foo" contains the string "abc" with no trailing newline. When called without arguments, it acts as a filter. When called with "-x", it executes a self-test, and the output should literally match the output given in the RFC. Code by Jan-Hein B\"uhrman after the original in C. md5driver.pyo000064400000006377152527255410007223 0ustar00ó ¿œ^c@s—ddlZddlZddlmZd„ZddlmZd„Zd„Zd„Zd„Z ddlZd „Z d „Z d „Z e ƒdS( iÿÿÿÿN(targvcCsSd}xB|D]:}t|ƒ}|tj|d?d@tj|d@}q W|GdS(Ntii(tordtstringt hexdigits(tstrtoutstrtito((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDPrints   ,(ttimecCs8d}x+t||dƒD]}|t|ƒ}qW|S(NRi(trangetchr(tstarttendtresultR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmakestrsc Csád}d}||}d }td|dƒ}|||}|||| }~~dG|GdGHtƒ}tjƒ}x!t|ƒD]}|j|ƒq„W|jƒ} tƒ} t| ƒdGHd G| |GHd G|| |GHdS( Nièi'iiisMD5 time trial. Processings characters...sis digest of test input.sSeconds to process test input:s Characters processed per second:i(RR tmd5tnewR tupdatetdigestR ( tTEST_BLOCK_SIZEt TEST_BLOCKSt TEST_BYTEStfilsiztfillertdatatt1t mdContextRRtt2((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyt MDTimeTrials&        cCs*ttj|ƒjƒƒd|dGHdS(Nt"(R RRR(R((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDString;scCsat|dƒ}tjƒ}x*|jdƒ}|s7Pn|j|ƒqWt|jƒƒ|GHdS(Ntrbi(topenRRtreadRR R(tfilenametfRR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFile@s cCsQtjƒ}x-tjjdƒ}|s+Pn|j|ƒqWt|jƒƒHdS(Ni(RRtsyststdinR#RR R(RR((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytMDFilterPs cCsÒdGHtdƒtdƒtdƒtdƒtttdƒtdƒƒƒtttdƒtdƒƒttdƒtdƒƒttd ƒtd ƒƒƒtttd ƒtd ƒƒd d ƒtd ƒdS(NsMD5 test suite results:Rtatabcsmessage digesttztAtZt0t9t1itfoo(R RRR&(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyt MDTestSuite]s    N'cCsŒttƒdkrtƒnxitdD]]}|d dkrNt|dƒq'|dkrdtƒq'|dkrztƒq't|ƒq'WdS(Niis-ss-ts-x(tlenRR)R RR3R&(targ((s./usr/lib64/python2.7/Demo/md5test/md5driver.pytmainns     ( RRR'RR R RRR R&R)R3R6(((s./usr/lib64/python2.7/Demo/md5test/md5driver.pyts     "     foo000064400000000003152527255410005253 0ustar00abc