Skip to content

Rock-Paper-Scissors SpringBoot Backend featuring AES encryption, SHA-256 hashing and Caesar cipher data protection.

Notifications You must be signed in to change notification settings

marcoscastroj/cripto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🪙 CriptoGame – Pedra Papel Tesoura com Criptografias (Spring Boot 4)

Este projeto é uma API REST desenvolvida em Spring Boot 4, integrando técnicas de criptografia (AES, SHA-256, Cifra de César) com um sistema de jogo Pedra–Papel–Tesoura.

O sistema possui:

  • Registro e login com hash SHA-256
  • Nome de exibição criptografado com Cifra de César
  • Histórico de partidas armazenado com notas criptografadas em AES
  • Sessão via JSESSIONID (cookies) — sem JWT
  • Endpoints para jogar MD1, MD3 e MD5
  • Histórico de partidas
  • Testes unitários completos

🚀 Tecnologias

  • Java 21
  • Spring Boot 4
  • Spring Web
  • Spring Security (Cookie-Based Session)
  • Spring Data JPA
  • PostgreSQL
  • Liquibase
  • Mockito + JUnit 5
  • Swagger/OpenAPI (SpringDoc)

🗂 Estrutura do Projeto

src/main/java/com/unifacisa/cripto/
│
├── config/ # SecurityConfig
├── controller/ # Controllers REST
├── cryptography/ # CaesarService / AesService
├── dto/ # DTOs
├── entity/ # User / Match entities
├── enums/ # Move / Result
├── repository/ # JPA Repositories
├── security/ # HashService + UserSessionService
└── service/ # AuthService / GameService

🧩 Criptografias Implementadas

🔐 1. SHA-256

Usado para armazenar senha no banco.

🌀 2. Cifra de César (SHIFT = 3)

Usado para criptografar o displayName do usuário.

🔒 3. AES-128

Usado para criptografar notas internas das partidas (ex: “Round MD3”, “Partida MD1”).


🍪 Autenticação (Importante)

O projeto NÃO usa JWT.

Ele usa cookies de sessão fornecidos pelo Spring Security:

Set-Cookie: JSESSIONID=xxxxxxx; Path=/; HttpOnly; SameSite=Lax

Após o login:
👉 O backend salva o usuário no UserSessionService (session scoped)
👉 Toda requisição posterior precisa mandar o cookie JSESSIONID

No Postman:

  1. Faça o login
  2. Vá em Cookies → Adicionar Cookie → JSESSIONID=id
  3. Faça as requisições /game/** e /history/**

🛠 Como Rodar o Projeto

1️⃣ Configurar banco no application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/cripto
spring.datasource.username=postgres
spring.datasource.password=123
spring.jpa.hibernate.ddl-auto=none
spring.liquibase.enabled=true

2️⃣ Rodar com Maven

mvn spring-boot:run

3️⃣ Acessar Swagger

http://localhost:8080/swagger-ui/index.html

📌 Endpoints Principais

🔑 Auth

POST /auth/register

{
  "username": "marcos",
  "password": "123",
  "displayName": "Marcos Castro"
}

POST /auth/login

👉 Retorna cookie JSESSIONID.

{
  "username": "marcos",
  "password": "123"
}

POST /auth/logout


🎮 Game

MD1 – POST /game/play?move=pedra

MD3 – POST /game/md3

["pedra", "papel", "tesoura"]

MD5 – POST /game/md5

["pedra","pedra","papel","tesoura","papel"]

📜 History

GET /history

Retorna histórico do usuário logado.


🧪 Testes Unitários

Os testes cobrem:

✔ Criptografia Caesar
✔ Criptografia AES
✔ Hash SHA-256
✔ AuthService
✔ GameService (MD1, MD3, MD5)
✔ AuthController
✔ GameController
✔ HistoryController

🧱 Liquibase

O projeto contém:

  • db/changelog/master.xml
  • Scripts para criação de tabelas user e match

About

Rock-Paper-Scissors SpringBoot Backend featuring AES encryption, SHA-256 hashing and Caesar cipher data protection.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages