Я определил модель, как показано ниже в Peewee:
class User(Model):
username = CharField(null=False)
password = FixedCharField(null=False, max_length=32)
Проблема в том, что я хочу, чтобы полевой password
был хэширован как MD5. Например:
user = User.create(username="whatever", password="whatever")
user.password # returns '008c5926ca861023c1d2a36653fd88e2'
Я использую MySQL, и у него уже есть функция MD5()
. Так...
MD5()
MySQL? или же...Model::create
как Django?Трудность с выполнением какого-либо преобразования заключается в том, что у вас возникнут проблемы с определением того, был ли пароль уже хэширован.
Поскольку mysql имеет встроенный md5, вы можете:
User.create(username=username, password=fn.md5(raw_password))
Потому что любовь бога не использует md5, хотя - она полностью сломана.
На странице хакеров документации peewee:
def get_hexdigest(salt, raw_password):
data = salt + raw_password
return sha1(data.encode('utf8')).hexdigest()
@db.func()
def make_password(raw_password):
salt = get_hexdigest(str(random()), str(random()))[:5]
hsh = get_hexdigest(salt, raw_password)
return '%s$%s' % (salt, hsh)
@db.func()
def check_password(raw_password, enc_password):
salt, hsh = enc_password.split('$', 1)
return hsh == get_hexdigest(salt, raw_password)
query = User.insert(
username='charlie',
password=fn.make_password('testing')).execute()