On 21 Dec 2012, at 5:12 PM, Pearu Peterson <pearu.peter...@gmail.com> wrote: > Hi, > > I have a password in plain text and I want to check if it matches with the > crypted password in auth_user.password field. > > I have tried comparing auth_user.password with > str(db.auth_user.password.validate(plain_password)[0]) with no success even > when I know that the passwords match exactly. > > The problem seems to boil down to the fact that encryption of the same string > results different encrypted strings. For example, > >>> from gluon.validators import CRYPT, LazyCrypt > >>> crypt = CRYPT() > >>> str(LazyCrypt(crypt, 'mysecret')) > > 'pbkdf2(1000,20,sha512)$a2a2ca127df6bc19$77bb5a3d129e2ce710daaefeefef8356c4c827ff' > >>> str(LazyCrypt(crypt, 'mysecret')) > > 'pbkdf2(1000,20,sha512)$a555a267249876fb$bc18f82b72a3a5ebce617f32d6abaa5c48734ab9' > > What would be the correct way to check if passwords match when they are given > in encrypted form?
You have to compare using the equality test in CRYPT, so compare CRYPT()(plaintext) == store_password (or something like that). You can't compare the resulting strings, because they have different (random) salt, at least by default they do. > > Any hints are appreciated, > Pearu > > > -- > > > --