===== Opbevaring af passwords i en database =====
Når man laver et login‑system, må man **aldrig gemme passwords i klar tekst** i databasen.
Hvis databasen bliver stjålet, vil alle brugeres passwords ellers være synlige.
I stedet bruger man disse principper:
* Passwords **hashes**
* Hvert password får et **salt**
* Kun **hash + salt** gemmes i databasen
----
===== Hvad er hashing? =====
En **hash** er resultatet af en **énvejskryptering**:
* Man kan lave en hash ud fra et password
* Man kan **ikke** lave passwordet ud fra hashen
Eksempel:
Password: "hemmeligt123"
Hash: "A94A8FE5CCB19BA61C4C..."
Når brugeren logger ind:
* Brugeren indtaster sit password
* Passwordet hashes igen
* Hashen sammenlignes med den, der ligger i databasen
----
===== Hvad er "salt"? =====
Et **salt** er en **tilfældig tekst**, som lægges sammen med passwordet **før hashing**.
Eksempel:
Password: hemmeligt123
Salt: X7f@9Q!
Resultat: hemmeligt123X7f@9Q!
Det samlede resultat hashes derefter.
----
===== Hvorfor bruger man salt? =====
Salt forhindrer to vigtige angreb:
* **Ens passwords → samme hash**
* **Rainbow table‑angreb** (færdige lister med hashes)
Uden salt:
"1234" → samme hash for alle brugere
Med salt:
"1234" + saltA → hash1
"1234" + saltB → hash2
Selv om to brugere har samme password, får de **forskellige hashes**.
----
===== Hvordan gemmes det i MariaDB? =====
I databasen gemmer man typisk:
* `PasswordHash`
* `Salt`
Eksempel på tabel:
id | username | password_hash | salt
Man gemmer **aldrig selve passwordet**.
----
===== Kort C#‑tanke (uden kode) =====
I C# gør man typisk:
* Generér et tilfældigt salt
* Kombinér password + salt
* Hash resultatet (fx med SHA‑256 eller bedre)
* Gem hash og salt i databasen
Ved login:
* Hent salt fra databasen
* Hash det indtastede password + salt
* Sammenlign hashes
***