[Python编程(第4版)].(Programming.Python.4th.Edition).Mark.Lutz.文字版

(yzsuai) #1

sys.stderr.write('using PyCrypto\n')
from Crypto.Cipher import AES
mykey = 'pymailcgi3'.ljust(16, '-') # key must be 16, 24, or 32 bytes


def do_encode(pswd):
over = len(pswd) % 16
if over: pswd += '\0' * (16-over) # pad: len must be multiple of 16
aesobj = AES.new(mykey, AES.MODE_ECB)
return aesobj.encrypt(pswd)


def do_decode(pswd):
aesobj = AES.new(mykey, AES.MODE_ECB)
pswd = aesobj.decrypt(pswd)
return pswd.rstrip('\0')


elif useRotor:
#######################################################


use the standard lib's rotor module to encode pswd


this does a better job of encryption than code above


unfortunately, it is no longer available in Py 2.4+


#######################################################


sys.stderr.write('using rotor\n')
import rotor
mykey = 'pymailcgi3'


def do_encode(pswd):
robj = rotor.newrotor(mykey) # use enigma encryption
return robj.encrypt(pswd)


def do_decode(pswd):
robj = rotor.newrotor(mykey)
return robj.decrypt(pswd)


else:
#######################################################


use our own custom scheme as a last resort


shuffle characters in some reversible fashion


caveat: very simple -- replace with one of your own


#######################################################


sys.stderr.write('using simple\n')
adder = 1


def do_encode(pswd):
pswd = 'vs' + pswd + '48'
res = ''
for char in pswd:
res += chr(ord(char) + adder) # inc each ASCII code
return str(res)


def do_decode(pswd):
pswd = pswd[2:-2]
res = ''
for char in pswd:


1284 | Chapter 16: The PyMailCGI Server

Free download pdf