2010-05-28 7 views
5

No es una pregunta perl específica Estoy construyendo una aplicación perl gui/wxperl que se conecta a DB. Quiero que mi aplicación sea una contraseña protegida, es decir, primero el usuario debe ingresar el usuario y la contraseña y luego usar la aplicación.autentificación en la aplicación gui escrita en perl

¿Cuál es el mejor método seguro para almacenar la contraseña? ¿Alguien podría dar una idea de cuál es el mejor método para almacenar el usuario y la contraseña y cómo debo recuperarlos para la autenticación? si es posible ¿alguien podría proporcionar algún código perl sobre cómo hacer esto?

Respuesta

9

Definitivamente no desea guardar las contraseñas en texto sin formato, probablemente debería considerar el uso de sha256. Puede usar el mod de Perl Digest :: SHA (vea CPAN para documentos).

use Digest::SHA qw(sha256); 
my $digest = sha256($input_password); 
my $saved_digest_password = get_saved_password_for_user($input_user); 
if ($digest eq $saved_digest_password){ 
    # they have the correct password 
} 

Eso es sólo pseudo código, pero debería ayudar a empezar. Depende de usted definir "get_saved_password_for_user" como lo desee, ya sea que esté almacenado en una base de datos en alguna parte o en el sistema de archivos o en otro lugar. Solo asegúrese de no almacenar ni registrar la $ input_password en ninguna parte. Lo único que debe almacenar es la contraseña de $ digest.

Espero que ayude!

+1

+1, incluso como psuedocode se llega a los principios básicos de la coincidencia de contraseñas. – Axeman

+1

Buena publicación, pero no use el símbolo '&' en sus llamadas de subrutina. No es necesario aquí, y tiene un significado muy específico. ¿Tiene 'get_saved_password_for_user()' un prototipo que debe ser reemplazado aquí? Ver http://www.perlfoundation.org/perl5/index.cgi?subroutines_called_with_the_ampersand para más información. – daotoad

+0

Esta es una muy buena respuesta, pero como saben perl es de código abierto, ¿qué pasa si alguien cambia el if ($ digest eq $ saved_digest_password) a if ($ digest ne $ saved_digest_password) y luego ingresará por cada contraseña incorrecta podría alguien tener alguna idea cómo resolver esto de manera elegante? – oren

Cuestiones relacionadas