2010-11-04 4 views
2

Мне нужно зашифровать данные, хранящиеся в web2py, точнее пароли.Каков наилучший способ шифрования сохраненных данных в web2py?

Речь идет не об аутентификации, а о чем-то вроде строки приложения KeePass.

Я видел, что это включено в web2py, но и M2Secret может легко это сделать. С M2Secret я могу использовать это:

 
import m2secret 

# Encrypt 
secret = m2secret.Secret() 
secret.encrypt('my data', 'my master password') 
serialized = secret.serialize() 

# Decrypt 
secret = m2secret.Secret() 
secret.deserialize(serialized) 
data = secret.decrypt('my master password') 

Но я бы включить библиотеку M2Crypto в моем приборе.

Есть ли способ сделать это с помощью PyMe, который уже включен в web2py?

ответ

3

По умолчанию web2py хранит пароли хэширования с использованием HMAC + SHA512, поэтому вам нечего делать. Это лучше, чем механизм, который вы предлагаете, потому что шифрование является обратимым, а хеширование - нет. Вы можете изменить это и сделать то, что вы просите выше, но оно не будет более безопасным, чем использование открытого текста (поскольку вам нужно будет открыть ключ шифрования в приложении).

В любом случае. Предположим, у вас есть

db.define_table('mytable',Field('myfield'.'password')) 

и вы хотите использовать m2secret. Вы бы сделали:

class MyValidator: 
    def __init__(self,key): self.key=key 
    def __call__(self,value): 
     secret = m2secret.Secret() 
     secret.encrypt(value, self.key) 
     return secret.serialize() 
    def formatter(self,value): 
     secret = m2secret.Secret() 
     secret.deserialize(value) 
     return (secret.decrypt(self.key),None) 

db.mytable.myfield.requires=MyValidator("master password") 

В валидаторах Web2py также есть двухсторонние фильтры.

+0

Спасибо Массимо, это приведет меня в правильном направлении. – Cyann

+0

Обратите внимание, что мне нужно сохранить данные с помощью обратимого шифрования, поскольку целью приложения является передача сохраненных паролей. Моя проблема заключается в автономной атаке на базу данных, поэтому я хочу зашифровать данные. Но я посмотрю алгоритмы открытого ключа, доступные в PyMe, чтобы не добавлять зависимости в web2py. – Cyann

+0

Возможно, вы захотите рассмотреть возможность хранения БД в зашифрованной файловой системе (возможно, в файле). Если лучше передать ответственность за шифрование ОС, чем приложение, поскольку последнее, если первое может быть скомпрометировано в случае атаки. – mdipierro