Dancer2-Plugin-Passphrase
view release on metacpan or search on metacpan
lib/Dancer2/Plugin/Passphrase.pm view on Meta::CPAN
A fresh salt needs to be created each time you hash a password. It isn't meant
to be a secret key.
=item We generate our random salt using C<rand>.
C<rand> isn't actually random, it's a non-unform pseudo-random number generator,
and not suitable for cryptographic applications. Whilst this module also defaults to
a PRNG, it is better than the one provided by C<rand>. Using a true RNG is a config
option away, but is not the default as it it could potentially block output if the
system does not have enough entropy to generate a truly random number
=item We use C<md5(pass.salt)>, and the salt is from C</dev/random>
MD5 has been broken for many years. Commodity hardware can find a
hash collision in seconds, meaning an attacker can easily generate
the correct MD5 hash without using the correct password.
=item We use C<sha(pass.salt)>, and the salt is from C</dev/random>
SHA isn't quite as broken as MD5, but it shares the same theoretical
weaknesses. Even without hash collisions, it is vulnerable to brute forcing.
Modern hardware is so powerful it can try around a billion hashes a second.
That means every 7 character password in the range [A-Za-z0-9] can be cracked
in one hour on your average desktop computer.
=item If the only way to break the hash is to brute-force it, it's secure enough
It is unlikely that your database will be hacked and your hashes brute forced.
However, in the event that it does happen, or SHA512 is broken, using this module
gives you an easy way to change to a different algorithm, while still allowing
you to validate old passphrases
=back
=head1 KNOWN ISSUES
If you see errors like this
Wide character in subroutine entry
or
Input must contain only octets
The C<MD5>, C<bcrypt>, and C<SHA> algorithms can't handle characters with an ordinal
value above 255, producing errors like this if they encounter them.
It is not possible for this plugin to automagically work out the correct
encoding for a given string.
If you see errors like this, then you probably need to use the L<Encode> module
to encode your text as UTF-8 (or whatever encoding it is) before giving it
to C<passphrase>.
Text encoding is a bag of hurt, and errors like this are probably indicitive
of deeper problems within your app's code.
You will save yourself a lot of trouble if you read up on the
L<Encode> module sooner rather than later.
For further reading on UTF-8, unicode, and text encoding in perl,
see L<http://training.perl.com/OSCON2011/index.html>
=head1 SEE ALSO
L<Dancer2>, L<Digest>, L<Crypt::Eksblowfish::Bcrypt>
=head1 ACKNOWLEDGMENTS
=over
=item James Aitken for his D1 version.
=item Sawyer X for his D2 magic.
=item Mohammad S Anwar (GH#4, typo fixes)
=item Jim Davis (GH#5)
=item Peter Mottram (GH#11)
=item Nuno Carvalho (GH#12)
=item Tom Adams (fix generate docs)
=item Jeremi M. Gosney (GH #2)
=item Sergiy Borodych (GH #3)
=back
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2016-2018 Peter Mottram <peter@sysnix.com>.
Copyright (c) 2016 Henk van Oers <hvo.pm@xs4all.nl>.
Copyright (c) 2012-2016 James Aitken.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
( run in 1.211 second using v1.01-cache-2.11-cpan-39bf76dae61 )