I've made this work.  I still need a little bit of time to make it
backward compatible with non-salted passwords though.

First things first, I had to disable the CRYPT validator.  Although it
makes handling passwords easier, encrypting them at the validator
level really limits a lot of account enforcement options.

Next I created an extra utility library with two methods:
crypt(password='', algorithm='sha256', salt='') and
check_password(plain_password='', encrypted_password='').  The crypt
function is pretty simple.  It returns a hexdigest given a specified
algorithm, string and salt.  If no salt is specified, a 16 character
salt is randomly generated.

Finally I had to do some tweaking in the Auth class.  First I changed
the login method to check the password with my check_password instead
of a simple string compare.  Next I had to add a "onvalidate" method
to the 'register' and 'change_password' methods to encrypt the
password.  The change_password was actually a little more involved
because I had to customize the old_password validator to use my
check_password method.

I'm not quite ready to share the diff files because I want to re-work
it so that it's reverse compatible with auth_user data created with
the default settings.


On Sep 21, 1:05 pm, Dave <dave.st...@gmail.com> wrote:
> Well  clearly I've sparked plenty of discussion.  I am working on this
> to fit my app need.  Once I have a working model that doesn't break
> other applications that use the default hashing and CRYPT functions
> I'll post my work.  As others have commented, the typical way for
> storing the password would be {algorithm}$salt$hash.  I have no
> problem with that.  The previous developer of the app I am working on
> just chose to store thesaltin a separate field in the table.  It's
> fairly trivial for me to convert the 1500 or so user password strings.
>
> Stay tuned and I'll post something later this week or next.
>
> On Sep 20, 11:36 pm, Massimo Di Pierro <massimo.dipie...@gmail.com>
> wrote:
>
>
>
>
>
>
>
> > This will be useful put presents a technical difficulty because of the
> > way CRYPT works. CRYPT is the validator that check is a password is
> > valid, and it does not know what is stored in db therefore it does not
> > know thesalt. Anyway, let me know if you have a suggestion.
>
> > Massimo
>
> > On Sep 20, 9:25 pm, Dave <dave.st...@gmail.com> wrote:
>
> > > I have just started using web2py but already, I'm quite impressed.  In
> > > the past couple days I've already rolled out an entire site rewrite
> > > and I'm working on my second project.
>
> > > The project I'm working on right now is currently in PHP.  I was in
> > > the process of converting it to a Java / Spring MVC project when I
> > > discovered web2py and decided that'd be a much easier, simpler and
> > > quicker way to roll the app.
>
> > > So, let me get to my point..  The current application utilizes the php
> > > sha1() function with aper-usersaltstored in the database.  Thesalt
> > > is randomly generated each time the password is changed.  This is
> > > similar to the default configuration on most linux boxes.
>
> > > I need to make some changes to the Auth class to support the per-
> > > record passwordsaltinstead of application-widesalt.  Does it make
> > > sense for me to provide my edits as part of the project, in case
> > > someone else thinks the functionality is useful?  I plan on basically
> > > checking to see if there is a 'salt' field in the user auth table, and
> > > if so, append that to the plain text password before passing it to the
> > > appropriate hashlib function.
>
> > > Thoughts?

Reply via email to