Mostrar al Usuario Su Contraseña

24 abr 2013, 23:44:26
Vistas: 13.6K
Votos: 3

Tengo algunos scripts automatizados que se ejecutan para notificar a los usuarios sobre ciertas actualizaciones de la aplicación, etc... y para uno en particular, necesito poder mostrar a los usuarios su user_login y su contraseña.

¿Cómo muestro al usuario su contraseña si está encriptada?

3
Comentarios

No puedes mostrarles la contraseña, es un cifrado unidireccional. Es así por diseño.

t31os t31os
24 abr 2013 23:54:04

Probablemente sea una práctica horrible, pero podrías capturarla cuando los usuarios se registran y guardarla para tu propio uso posterior.

montrealist montrealist
25 abr 2013 00:09:14

Esta pregunta no debería haber recibido votos negativos solo porque alguien asume que el OP está haciendo algo sospechoso - eso es lo que me parece que ocurrió porque no está tan mal redactada como pregunta en comparación con otras... esa es mi opinión de todos modos - pero tal vez hay algo en el meta que no he visto

byronyasgur byronyasgur
20 ago 2015 02:10:27
Todas las respuestas a la pregunta 2
0

Las contraseñas de los usuarios se almacenan en la base de datos como lo que se conoce como un hash. Los hash no son reversibles, incluso si conoces el hash y el mecanismo utilizado para crearlo. La única forma de "descifrar" un hash es tomar una contraseña, aplicarle el hash, compararlo con el hash objetivo e intentarlo de nuevo... una y otra vez hasta obtener una coincidencia. Si lo piensas, en realidad no estás descifrando nada. Es simplemente fuerza bruta mediante prueba y error.

La contraseña en texto plano nunca se guarda y no debes intentar guardarla, ya que eso compromete la seguridad del sitio, y como las personas tienden a reutilizar contraseñas, también compromete la seguridad de muchos otros sitios.

25 abr 2013 00:15:24
1

Teóricamente, esto podría lograrse guardando la contraseña de un usuario en otro lugar cuando la actualiza.

Ten en cuenta que este tipo de práctica casi nunca es recomendable.
En casi todos los casos, existe un enfoque arquitectónico mejor que hace innecesario poder mostrar contraseñas en texto plano.

Dicho esto, si absolutamente debes hacerlo, así es como podría hacerse:

function wpse_97127_save_passes( $errors, $update, $user )
{
    if (
        empty( $errors->errors ) &&
        ! empty ( $_POST['pass1'] )
    ) {
        /* si debes guardarla de forma reversible, al menos no la guardes en texto plano */
        $pass = base64_encode(
            mcrypt_encrypt(
                MCRYPT_RIJNDAEL_256,
                md5(AUTH_KEY),
                $_POST['pass1'],
                MCRYPT_MODE_CBC,
                md5(md5(AUTH_KEY))
            )
        );
        // haz algo con $pass, por ejemplo, guárdala en algún lugar
    }
}
add_action( 'user_profile_update_errors', 'wpse_97127_save_passes', 0, 3 );

Lo anterior puede revertirse de la siguiente manera:

$pass_from_db = $wpdb->get_results( /* recupera la contraseña cifrada pero reversible de la base de datos */ );
$pass = rtrim(
    mcrypt_decrypt(
        MCRYPT_RIJNDAEL_256,
        md5(AUTH_KEY),
        base64_decode($pass_from_db),
        MCRYPT_MODE_CBC,
        md5(md5(AUTH_KEY))
    ),
    "\0"
);

Por favor, no hagas esto en entornos de producción con cuentas de usuarios individuales sin su consentimiento o conocimiento. Eso no solo constituiría una mala práctica, sino también un acto poco ético.

Yo hago lo anterior en exactamente un caso con un rol de usuario específico, cuyas capacidades están limitadas, cuyos nuevos usuarios siempre son configurados por un administrador u otro rol de mayor nivel, y cuya contraseña se comparte con múltiples personas desde el principio.
Y aún así, no me siento bien al respecto.

25 abr 2013 01:23:23
Comentarios

Encontré esto útil para almacenar cosas de forma encriptada pero reversible. Estoy de acuerdo en que probablemente sea una mala idea para contraseñas, sin embargo.

hazrpg hazrpg
7 sept 2019 17:12:42