Código fuente completo en C# con las librerías DLL necesarias para desarrollar una aplicación de consola a la que se le pasan dos contraseñas, una en texto plano y otra la cifrada por WordPress. La aplicación cifrará la contraseña plana con el método de WordPress y las comparará, si son iguales devolverá 32, si son diferentes devolverá 11, si hay error en los parámetros devolverá 12 y si ha habido errores al comprobar las contraseñas devolverá 13.

Requisitos para desarrollar aplicación de consola C#

Utilizaremos Visual Studio .Net Community 2022, en el siguiente artículo explicamos cómo descargarlo e instalarlo:

Esta aplicación de consola no necesita conexión con la base de datos MySQL/MariaDB de WordPress, dado que sólo necesita que se le pasen ambas contraseñas por parámetro (argumento) al ejecutable. La aplicación externa que use esta herramienta sí necesitará este tipo de conexión a la BD de WordPress para obtener la contraseña cifrada del usuario.

La herramienta usará la librería CryptSharp.dll para el cifrado y comparación de contraseñas, por ello deberemos tener este fichero en la misma carpeta que el ejecutable. Dicho fichero se incluye en la descarga del código fuente de la aplicación.

Caso de uso, comparar contraseña introducida por usuario y contraseña almacenada en WordPress

Cuando tenemos un sitio web en WordPress y tenemos gestión de usuarios, WordPress almacena las contraseñas obteniendo el HASH MD5 y haciendo un pequeño «cifrado» adicional. Si queremos realizar una validación de usuarios externa a WordPress, desde una aplicación de escritorio por ejemplo, deberemos solicitar la contraseña al usuario, cifrarla con el mismo mecanismo que WordPress y compararla.

Supongamos que tenemos una aplicación en Delphi Community Edition que requiere de validación en la base de datos de usuarios de WordPress. En este caso podremos utilizar la herramienta de consola de C# para realizar esta validación.

La aplicación Delphi (o cualquier otra), en su formulario de login, ejecutará la aplicación de consola, pasándole como parámetro la contraseña introducida por el usuario y como segundo parámetro la contraseña de este usuario almacenada en al base de datos de WordPress.

Caso de uso, comparar contraseña introducida por usuario y contraseña almacenada en WordPress

La aplicación de consola comparará las contraseñas y devolverá 11 si son iguales. La aplicación Delphi obtendrá el ExitCode devuelto por la aplicación de consola, si es 11 continuará con el inicio correcto de la aplicación, en caso contrario indicará que la contraseña no es correcta.

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Abriremos Visual Studio Community y crearemos un nuevo proyecto de Aplicación de consola (.NET Framework):

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Introduciremos un nombre para la solución, por ejemplo ProyectoAValidarLoginWordPress, una carpeta (ubicación) y la versión de .NET Framework mínima a aplicar, en este proyecto usaremos .NET Framework 2.0. Aunque es un Framework muy viejo, tiene la ventaja de que esta aplicación se podrá ejecutar en sistemas x32 y x64, por lo que la aplicación funcionará en equipos con Windows XP, Windows 7, Windows Vista, etc.:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Agregaremos la librería CryptSharp.dll a la carpeta bin\Debug del proyecto (donde residirá el ejecutable). Dicha librería esta disponible en la descarga de esta aplicación:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Agregaremos una referencia a esta librería en el proyecto, pulsando en el menú «Proyecto» – «Agregar referencia…»:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Pulsaremos en «Examinar»:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Seleccionaremos el fichero DLL CryptSharp.dll:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Aceptaremos los cambios para agregar la referencia a esta DLL:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Agregaremos el using correspondiente:

Aplicación de consola C# que compara la contraseña introducida con la almacenada en WordPress

Y agregaremos el siguiente código C#:

Como se puede comprobar, el código obtiene dos parámetros (las dos contraseñas), el primer parámetro será la contraseña plana sin cifrar y el segundo parámetro la contraseña cifrada almacenada en WordPress. El código realizará la comparación entre ambas contraseñas (cifrando con el mismo método la contraseña plana). Devolverá un ExitCode:

  • 32: las contraseñas plana (introducida en el formulario de login del usuario) y cifrada (en la BD de WordPress) coinciden.
  • 11: las contraseñas no coinciden.
  • 12: parámetros incorrectos, la aplicación requiere de parametro1 = contraseña plana, parametro2 = contraseña cifrada WordPress.
  • 13: ha habido algún error al comprar las contraseñas.

Compilando y probando la aplicación de consola que compara contraseñas WordPress

Para probar este tipo de aplicaciones de consola que requieren de parámetros, desde Visual Studio .Net, pulsaremos en el menú «Depurar» – «Propiedades de depuración de ProyectoAValidadLoginWordPress»:

Compilando y probando la aplicación de consola que compara contraseñas WordPress

En «Argumentos de la línea de comandos» introduciremos los dos parámetros requeridos por la aplicación, entre comillas dobles y separados con un espacio, por ejemplo:

«micontraseñawp» «$BwdZk74lLY3vInb7sMwKwam.BuVov/2»

Compilando y probando la aplicación de consola que compara contraseñas WordPress

Ahora podremos compilar la aplicación, se le pasarán estos dos parámetros para verificar que funciona correctamente. La aplicación generará el cifrado de la contraseña «micontraseñawp» en modo WordPress y comparará si esta contraseña cifrada coincide con la «$BwdZk74lLY3vInb7sMwKwam.BuVov/2«. Si coincide devolverá un código de salida de 32, en caso contrario devolverá 11.

Compilando y probando la aplicación de consola que compara contraseñas WordPress

En caso de que la contraseña plana coincida con la cifrada WordPress, mostrará (en modo depuración):

Compilando y probando la aplicación de consola que compara contraseñas WordPress

Para depurar la aplicación, se ha dejado en el código fuente la opción de mostrar el resultado por consola y esperar la pulsación de una tecla para continuar. En producción quitaremos todas las líneas «Console.WriteLine» y «Console.ReadKey()«:

Ejemplo de uso de la aplicación de consola en un formulario de login con Delphi

En una aplicación externa, por ejemplo desarrollada en Delphi, tendremos un formulario de este estilo (que solicitará usuario y contraseña de WordPress):

Ejemplo de uso de la aplicación de consola en un formulario de login con Delphi

Cuando el usuario pulsa en «Iniciar sesión», la aplicación accederá a la base de datos WordPress, a la tabla wp_users. Filtrará el usuario introducido y obtendrá la contraseña de WordPress cifrada. Una vez obtenida, ejecutará la aplicación de consola anterior, con:

ProyectoAValidarLoginWordPress.exe «contraseña_formulario_login» «contraseña_obtenida_BD_WordPress»

Y capturará el valor devuelto por la aplicación de consola, si devuelve 32 las contraseñas coinciden y se continuará con el acceso a la aplicación. En caso contrario se mostrará un error indicando que la contraseña no es correcta.

El código fuente del formulario anterior completo en Delphi 6:

Esta aplicación tendrá un DataModule llamado md con los siguientes componentes para acceso a MySQL/MariaDB:

  • TZQuery: llamado tc1 para ejecución de consultas SQL. Es el que usamos anteriormente para obtener la contraseña del usuario de WordPress de la tabla users.
  • TZConnection: llamdo «bd» para la conexión con bases de datos MySQL, MariaDB, Oracle, SQLite, Sybase, Firebird, etc..
Ejemplo de uso de la aplicación de consola en un formulario de login con Delphi

Descarga del código fuente de la aplicación C# completa que compara contraseñas WordPress

A continuación os dejamos el enlace a la descarga de la aplicación completa y el código fuente C#, desarrollada con Visual Studio .Net Community 2022, esta descarga incluye el fichero DLL Cryptsharp.dll: