Skip to content
This repository has been archived by the owner on Dec 30, 2024. It is now read-only.

Implementação de um sistema de autenticação de usuários com uma camada de persistência genérica e armazenamento seguro de senhas utilizando técnicas de hashing em banco de dados.

License

Notifications You must be signed in to change notification settings

luizakuze/Simple-AuthN-System

Repository files navigation

Sistema de autenticação de usuários 🔓🔑

Data: 27/11/2024
Autora: Luiza Kuze

💻 Tecnologias

  • Gradle
  • Java 21
  • Spring Security

✨ Funcionalidades

  • Armazenamento seguro de senhas: as senhas são armazenadas como hashes para maior segurança.

  • Persistência genérica: utiliza uma tabela hash, mas pode ser adaptada para banco de dados relacional.

  • Algoritmo de hash configurável: o padrão é BCrypt, mas pode ser ajustado durante a inicialização do serviço. Os algoritmos implementados incluem:

    • BCrypt: Forte, com salting automático.
    • PBKDF2: Algoritmo derivado de chave com suporte a múltiplas iterações, incluindo:
    • HmacSHA1
    • HmacSHA256
    • HmacSHA512
    • MessageDigest: Algoritmos de digest, incluindo:
      • MD5 (não recomendado para segurança moderna)
      • SHA-1 (mais seguro que MD5, mas desatualizado)
      • SHA-256 (recomendado)
      • SHA-512 (fortemente recomendado)
  • Sistema de autenticação: oferece as seguintes ações:

    • Cadastro de usuários;
    • Atualização de senhas;
    • Autenticação de usuários.
  • Interface via linha de comando.

📚 Diagrama UML

classDiagram
    direction LR

    class PasswordHashing {
        <<interface>>
        +hash(password: String) byte[]
        +verify(password: String, hashedPassword: byte[]) boolean
        +defineAlgorithmType(algorithm: String) PasswordHashing
    }

    class BcryptHashing {
        +hash(password: String)  byte[]
        +verify(password: String, hashedPassword: byte[]) boolean
    }
    
    class MessageDigestHashing {
        -S_RANDOM: SecureRandom
        -salt: byte[]
        -algorithm: String
        +MessageDigestHashing(algorithm: String)
        +hash(password: String): byte[]
        +verify(password: String, hashedPassword: byte[]) boolean
    }

    class Pbkdf2Hashing {
        -S_RANDOM: SecureRandom
        -ITERATIONS: int
        -KEYLENGTH: int
        -salt: byte[]
        -algorithm: String
        +Pbkdf2Hashing(algorithm: String)
        +hash(password: String) byte[]
        +verify(password: String, hashedPassword: byte[]) boolean
    }

    class User {
        -login: String
        -hashedPassword: byte[]
        +User(login: String, hashedPassword: byte[])
        +getLogin() String
        +getHashedPassword() byte[]
        +setLogin(login: String) void
        +setHashedPassword(hashedPassword: byte[]) void
    }

    class UserRepository {
        <<interface>>
        +save(user: User) boolean
        +findByLogin(login: String) User
        +containsRegistry(login: String) boolean
        +replacePassword(login: String, newHashedPassword: byte[]) boolean
        +deleteByLogin(login: String) boolean
    }

    class UserRepositoryMemory {
        -registries: HashMap ~< String, byte[] >~
        +UserRepositoryMemory()
        +save(user: User): boolean
        +findByLogin(login: String)  User
        +containsRegistry(login: String)  boolean
        +replacePassword(login: String, newHashedPassword: byte[])  boolean
        +deleteByLogin(login: String)  boolean
    }

    class UserService {
        -repository: UserRepository
        -passwordHashing: PasswordHashing
        +UserService(algorithm: String)
        +register(login: String, password: String) boolean
        +updatePassword(login: String, newPassword String, confirmNewPassword: String)  boolean
        +authenticate(login: String, password: String)  boolean
    }

    class App {
        -service: UserService
        +initializeService()  void
        +menuService()  void
    }

    PasswordHashing <|.. BcryptHashing
    PasswordHashing <|.. MessageDigestHashing
    PasswordHashing <|.. Pbkdf2Hashing

    UserRepository <|.. UserRepositoryMemory

    UserRepository o-- User
    UserService *-- UserRepository
    UserService *-- PasswordHashing
    App *-- UserService
    
Loading

📜 Licença

Este projeto é licenciado sob a MIT License.

About

Implementação de um sistema de autenticação de usuários com uma camada de persistência genérica e armazenamento seguro de senhas utilizando técnicas de hashing em banco de dados.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages