Как создать поле, которое преобразует его значение в MD5 при создании в Peewee

0

Я определил модель, как показано ниже в 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 5.7.21
  • Python 3.5.2
  • Peewee 3.1.0
  • 1
    docs.peewee-orm.com/en/latest/peewee/… имеет пример хеширования паролей
  • 0
    Вау, это было в самом конце официальной документации, а? Благодарю. Сохранение вопроса, если у кого-то еще есть другое решение.
Теги:
python-3.x
orm
peewee

2 ответа

1

Трудность с выполнением какого-либо преобразования заключается в том, что у вас возникнут проблемы с определением того, был ли пароль уже хэширован.

Поскольку mysql имеет встроенный md5, вы можете:

User.create(username=username, password=fn.md5(raw_password))

Потому что любовь бога не использует md5, хотя - она полностью сломана.

1

На странице хакеров документации 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()
  • 0
    Эти примеры относятся к SQLite, который поддерживает пользовательские функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню