Las contraseñas se debería hacer un hash en lugar de cifrar... me explico:
pides usuario y contraseña, haces un hash de la contraseña y comparas ese hash con el que está en la Base de datos. Si se hace con el nombre de usuario, mejor.
Se hace así porque no hay posibilidad de "desencriptar" y como dato sensible que es, nadie debería saber qué contraseña usa el usuario o el administrador del programa. Por supuesto debe haber una opción para "resetear" o machacar la contraseña actual si eres el administrador.
Lo del hash al nombre de usuario es porque si alguien ve que hay un usuario "pablo" y sabe el día que nació su hija... pues ya sabe la contraseña