Application console Kotlin pour l’enregistrement et la connexion des utilisateurs avec hachage simple des mots de passe, démonstration pédagogique sécurisée.
// Système de connexion textuel avec enregistrement des utilisateurs et hachage simple
// Classe représentant un utilisateur avec nom d'utilisateur et mot de passe haché
class User(val username: String, val passwordHash: String)
// Objet gérant l'enregistrement et l'authentification des utilisateurs
object UserManager {
// Carte stockant les utilisateurs enregistrés : nom d'utilisateur -> User
private val users = mutableMapOf<String, User>()
// Fonction pour enregistrer un nouvel utilisateur
// Retourne true si l'enregistrement réussit, false si l'utilisateur existe déjà
fun register(username: String, password: String): Boolean {
if (users.containsKey(username)) {
return false // Utilisateur déjà existant
}
val hash = hashPassword(password)
val user = User(username, hash)
users[username] = user
return true
}
// Fonction pour authentifier un utilisateur
// Retourne true si le nom d'utilisateur et le mot de passe correspondent
fun login(username: String, password: String): Boolean {
val user = users[username] ?: return false
val hash = hashPassword(password)
return user.passwordHash == hash
}
// Fonction de hachage simple : somme des codes ASCII des caractères
// Note : NON sécurisé pour un usage réel, démonstration uniquement
private fun hashPassword(password: String): String {
val sum = password.toCharArray().sumOf { it.code }
return sum.toString()
}
}
// Fonction principale avec interface textuelle
fun main() {
println("Bienvenue dans le système de connexion")
while (true) {
println("\nChoisissez une option :")
println("1 - S'enregistrer")
println("2 - Se connecter")
println("3 - Quitter")
print("Entrez votre choix : ")
val choice = readLine()
when (choice) {
"1" -> {
print("Entrez le nom d'utilisateur : ")
val username = readLine()?.trim() ?: ""
print("Entrez le mot de passe : ")
val password = readLine() ?: ""
if (username.isEmpty() || password.isEmpty()) {
println("Le nom d'utilisateur et le mot de passe ne peuvent pas être vides.")
continue
}
val success = UserManager.register(username, password)
if (success) {
println("Enregistrement réussi pour l'utilisateur '$username'.")
} else {
println("Erreur : l'utilisateur '$username' existe déjà.")
}
}
"2" -> {
print("Entrez le nom d'utilisateur : ")
val username = readLine()?.trim() ?: ""
print("Entrez le mot de passe : ")
val password = readLine() ?: ""
val success = UserManager.login(username, password)
if (success) {
println("Connexion réussie. Bienvenue, $username !")
} else {
println("Échec de la connexion : nom d'utilisateur ou mot de passe incorrect.")
}
}
"3" -> {
println("Sortie du programme. Au revoir !")
break
}
else -> {
println("Choix invalide, veuillez réessayer.")
}
}
}
}