纯Python实现的DES加解密算法,pythondes解密算法,test_pydes.p
纯Python实现的DES加解密算法,pythondes解密算法,test_pydes.p
test_pydes.py
from pyDes import *############################################################################## Examples ##############################################################################def _example_triple_des_(): from time import time # Utility module from binascii import unhexlify as unhex # example shows triple-des encryption using the des class print ("Example of triple DES encryption in default ECB mode (DES-EDE3)\n") print ("Triple des using the des class (3 times)") t = time() k1 = des(unhex("133457799BBCDFF1")) k2 = des(unhex("1122334455667788")) k3 = des(unhex("77661100DD223311")) d = "Triple DES test string, to be encrypted and decrypted..." print ("Key1: %r" % k1.getKey()) print ("Key2: %r" % k2.getKey()) print ("Key3: %r" % k3.getKey()) print ("Data: %r" % d) e1 = k1.encrypt(d) e2 = k2.decrypt(e1) e3 = k3.encrypt(e2) print ("Encrypted: %r" % e3) d3 = k3.decrypt(e3) d2 = k2.encrypt(d3) d1 = k1.decrypt(d2) print ("Decrypted: %r" % d1) print ("DES time taken: %f (%d crypt operations)" % (time() - t, 6 * (len(d) / 8))) print ("") # Example below uses the triple-des class to achieve the same as above print ("Now using triple des class") t = time() t1 = triple_des(unhex("133457799BBCDFF1112233445566778877661100DD223311")) print ("Key: %r" % t1.getKey()) print ("Data: %r" % d) td1 = t1.encrypt(d) print ("Encrypted: %r" % td1) td2 = t1.decrypt(td1) print ("Decrypted: %r" % td2) print ("Triple DES time taken: %f (%d crypt operations)" % (time() - t, 6 * (len(d) / 8)))def _example_des_(): from time import time # example of DES encrypting in CBC mode with the IV of "\0\0\0\0\0\0\0\0" print ("Example of DES encryption using CBC mode\n") t = time() k = des("DESCRYPT", CBC, "\0\0\0\0\0\0\0\0") data = "DES encryption algorithm" print ("Key : %r" % k.getKey()) print ("Data : %r" % data) d = k.encrypt(data) print ("Encrypted: %r" % d) d = k.decrypt(d) print ("Decrypted: %r" % d) print ("DES time taken: %f (6 crypt operations)" % (time() - t)) print ("")def _filetest_(): from time import time f = open("pyDes.py", "rb+") d = f.read() f.close() t = time() k = des("MyDESKey") d = k.encrypt(d, " ") f = open("pyDes.py.enc", "wb+") f.write(d) f.close() d = k.decrypt(d, " ") f = open("pyDes.py.dec", "wb+") f.write(d) f.close() print ("DES file test time: %f" % (time() - t))def _profile_(): try: import cProfile as profile except: import profile profile.run('_fulltest_()') #profile.run('_filetest_()')def _fulltest_(): # This should not produce any unexpected errors or exceptions from time import time from binascii import unhexlify as unhex from binascii import hexlify as dohex t = time() data = "DES encryption algorithm".encode('ascii') k = des("\0\0\0\0\0\0\0\0", CBC, "\0\0\0\0\0\0\0\0") d = k.encrypt(data) if k.decrypt(d) != data: print ("Test 1: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 1: Successful") data = "Default string of text".encode('ascii') k = des("\0\0\0\0\0\0\0\0", CBC, "\0\0\0\0\0\0\0\0") d = k.encrypt(data, "*") if k.decrypt(d, "*") != data: print ("Test 2: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 2: Successful") data = "String to Pad".encode('ascii') k = des("\r\n\tABC\r\n") d = k.encrypt(data, "*") if k.decrypt(d, "*") != data: print ("Test 3: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 3: Successful") k = des("\r\n\tABC\r\n") d = k.encrypt(unhex("000102030405060708FF8FDCB04080"), unhex("44")) if k.decrypt(d, unhex("44")) != unhex("000102030405060708FF8FDCB04080"): print ("Test 4a: Error: Unencypted data block does not match start data") elif k.decrypt(d) != unhex("000102030405060708FF8FDCB0408044"): print ("Test 4b: Error: Unencypted data block does not match start data") else: print ("Test 4: Successful") data = "String to Pad".encode('ascii') k = des("\r\n\tkey\r\n") d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 5a: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) # Try same with padmode set on the class instance. k = des("\r\n\tkey\r\n", padmode=PAD_PKCS5) d = k.encrypt(data) if k.decrypt(d) != data: print ("Test 5b: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 5: Successful") k = triple_des("MyDesKey\r\n\tABC\r\n0987*543") d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080")) if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"): print ("Test 6: Error: Unencypted data block does not match start data") else: print ("Test 6: Successful") k = triple_des("\r\n\tABC\r\n0987*543") d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080")) if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"): print ("Test 7: Error: Unencypted data block does not match start data") else: print ("Test 7: Successful") k = triple_des("MyDesKey\r\n\tABC\r\n0987*54B", CBC, "12341234") d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080")) if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"): print ("Test 8: Error: Triple DES CBC failed.") else: print ("Test 8: Successful") k = triple_des("MyDesKey\r\n\tABC\r\n0987*54B", CBC, "12341234") d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDC"), '.') if k.decrypt(d, '.') != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDC"): print ("Test 9: Error: Triple DES CBC with padding failed.") else: print ("Test 9: Successful") k = triple_des("\r\n\tkey\rIsGoodKey") data = "String to Pad".encode('ascii') d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 10: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 10: Successful") k = triple_des("\r\n\tkey\rIsGoodKey") data = "String not need Padding.".encode('ascii') d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 11: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 11: Successful") # Test PAD_PKCS5 with CBC encryption mode. k = des("IGoodKey", mode=CBC, IV="\0\1\2\3\4\5\6\7") data = "String to Pad".encode('ascii') d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 12: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 12: Successful") k = des("IGoodKey", mode=CBC, IV="\0\1\2\3\4\5\6\7") data = "String not need Padding.".encode('ascii') d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 13: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 13: Successful") k = triple_des("\r\n\tkey\rIsGoodKey", mode=CBC, IV="\0\1\2\3\4\5\6\7") data = "String to Pad".encode('ascii') d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 14: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 14: Successful") k = triple_des("\r\n\tkey\rIsGoodKey", mode=CBC, IV="\0\1\2\3\4\5\6\7") data = "String not need Padding.".encode('ascii') d = k.encrypt(data, padmode=PAD_PKCS5) if k.decrypt(d, padmode=PAD_PKCS5) != data: print ("Test 15: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 15: Successful") k = triple_des("\r\n\tkey\rIsGoodKey", mode=CBC, IV="\0\1\2\3\4\5\6\7", padmode=PAD_PKCS5) data = "String to Pad".encode('ascii') d = k.encrypt(data) if k.decrypt(d) != data: print ("Test 16: Error: decrypt does not match. %r != %r" % (data, k.decrypt(d))) else: print ("Test 16: Successful") print ("") print ("Total time taken: %f" % (time() - t))if __name__ == '__main__': #_example_des_() #_example_triple_des_() _fulltest_() #_filetest_() #_profile_()
评论关闭