Я использовал этот пример аутентификации, включая исправления в комментариях.
http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions
Вот как я шифрую
import Crypto.Random
from Crypto.Cipher import AES
import hashlib
# salt size in bytes
SALT_SIZE = 16
# number of iterations in the key generation
NUMBER_OF_ITERATIONS = 20
# the size multiple required for AES
AES_MULTIPLE = 16
__all__ = ['Encryption']
class Encryption(object):
def generate_key(self, password, salt, iterations):
assert iterations > 0
key = password + salt
for i in range(iterations):
key = hashlib.sha256(key).digest()
return key
def pad_text(self, text, multiple):
extra_bytes = len(text) % multiple
padding_size = multiple - extra_bytes
padding = chr(padding_size) * padding_size
padded_text = text + padding
return padded_text
def unpad_text(self, padded_text):
padding_size = padded_text[-1]
text = padded_text[:-padding_size]
return text
def encrypt(self, plaintext, password):
salt = Crypto.Random.get_random_bytes(SALT_SIZE)
key = Encryption.generate_key(self, password, salt, NUMBER_OF_ITERATIONS)
cipher = AES.new(key, AES.MODE_ECB)
padded_plaintext = Encryption.pad_text(self, plaintext, AES_MULTIPLE)
ciphertext = cipher.encrypt(padded_plaintext)
ciphertext_with_salt = salt + ciphertext
return ciphertext_with_salt
Затем вызовите функцию шифрования
encryptedPassword = Encryption.encrypt(self, Password, bytes(cherrypy.request.app.config['Encryption']['Password'], 'UTF-8'))
Надеюсь, это поможет!
Andrew