Cómo crear un campo que convierte su valor en MD5 en la creación en Peewee

Definí un modelo como abajo en Peewee:

class User(Model): username = CharField(null=False) password = FixedCharField(null=False, max_length=32) 

El problema es que quiero que la password campo se marque como MD5. Por ejemplo:

 user = User.create(username="whatever", password="whatever") user.password # returns '008c5926ca861023c1d2a36653fd88e2' 

Yo uso MySQL y ya tiene una MD5() . Asi que…

  • ¿Hay alguna manera de usar la MD5() incorporada de MySQL? o…
  • ¿Existe una forma integrada de manipular de alguna manera ese método Model::create como Django?

Ambiente

  • MySQL 5.7.21
  • Python 3.5.2
  • Peewee 3.1.0

Desde la página de hacks de documentación de 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() 

La dificultad de hacer algún tipo de transformación es que tendrá problemas para determinar si la contraseña ya estaba oculta.

Como mysql tiene md5 incorporado, puedes:

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

Para el amor de Dios no use md5, sin embargo, está completamente roto.