https://github.com/mariantaragel/pwcheck
Password strength checker
https://github.com/mariantaragel/pwcheck
c project strings
Last synced: 2 months ago
JSON representation
Password strength checker
- Host: GitHub
- URL: https://github.com/mariantaragel/pwcheck
- Owner: mariantaragel
- Created: 2021-11-14T13:58:13.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-05-26T15:35:20.000Z (about 3 years ago)
- Last Synced: 2025-02-03T08:36:42.355Z (4 months ago)
- Topics: c, project, strings
- Language: C
- Homepage:
- Size: 17.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Password checker
## Popis projektu
Cílem projektu je vytvořit program, který na vstupu dostane sadu hesel a pro každé z nich ověří, jestli heslo splňuje všechna (pevně zadaná) požadovaná pravidla. Ta hesla, která projdou kontrolou, budou vypisována na výstup, ostatní budou zahozena.
## Detailní specifikace
Vstupní data (seznam hesel) budou čtena ze standardního vstupu (stdin), výstup (filtrovaný seznam hesel) bude tisknut na standardní výstup (stdout).
### Překlad
Program překládejte s následujícími argumenty:
```sh
$ gcc -std=c99 -Wall -Wextra -Werror pwcheck.c -o pwcheck
```### Syntax spuštění
Program se spouští v následující podobě: (./pwcheck značí umístění a název programu):
```sh
./pwcheck LEVEL PARAM [--stats]
```Program je spouštěn se dvěma pevně zadanými argumenty LEVEL a PARAM a s jedním volitelným argumentem --stats, případně zadaným na třetí pozici:
LEVEL - celé číslo v intervalu [1, 4], které určuje požadovanou úroveň bezpečnosti (viz níže)
PARAM - kladné celé číslo, které určuje dodatečný parametr pravidel (viz níže)
--stats - pokud je zadané, určuje, zda se na konci programu mají vypsat souhrnné statistiky analyzovaných hesel### Úrovně bezpečnosti (kontrolovaná pravidla)
Jsou definovány celkem 4 úrovně bezpečnosti vyjádřeny pomocí 4 pravidel. Úroveň bezpečnosti určuje, že hesla musí splňovat všechna pravidla na dané a nižší úrovni.
Některá pravidla jsou parametrizovatelná celým číslem zadaným pomocí argumentu programu PARAM. V následujícím seznamu je tento parametr označen jako X.
Seznam pravidel:
1. Heslo obsahuje alespoň 1 velké a 1 malé písmeno.
2. Heslo obsahuje znaky z alespoň X skupin (v případě, že je číslo X větší než 4, myslí se tím všechny skupiny). Uvažované skupiny jsou:
- malá písmena (a-z)
- velká písmena (A-Z)
- čísla (0-9)
- speciální znaky
3. Heslo neobsahuje sekvenci stejných znaků délky alespoň X.
4. Heslo neobsahuje dva stejné podřetězce délky alespoň X.### Statistiky
Pokud je zadaný argument programu --stats, program musí na konec výstupu vypsat celkové statistiky ve formátu:
```sh
Statistika:
Ruznych znaku: NCHARS
Minimalni delka: MIN
Prumerna delka: AVG
```NCHARS - počet různých znaků vyskytujících se napříč všemi hesly
MIN - délka nejkratšího hesla (resp. hesel)
AVG - průměrná délka hesla (aritmetický průměr) zaokrouhlená na 1 desetiné místo## Implementační detaily
### Vstupní data (seznam hesel)
Seznam hesel je programu předán na standardním vstupu (stdin). Každé heslo je zadáno na samostatném řádku a obsahuje pouze ASCII textová data, kromě znaku nového řádku. Maximální délka hesla je 100 znaků, jinak se jedná o nevalidní data. Program musí podporovat neomezený počet hesel na vstupu.
### Výstup programu
Program na standardní výstup (stdout) vypisuje hesla ze vstupního seznamu, každé na samostatný řádek, která splňují požadovanou úroveň bezpečnosti zadanou jako argument programu LEVEL. Hesla musí být vypsána beze změny a ve stejném pořadí, v jakém se objevila na vstupu.
Za výstupním seznamem hesel pak program volitelně vypisuje statistiku (viz. Statistiky).
### Omezení v projektu
Je zakázané použít následující funkce:
- volání funkcí z knihoven string.h a ctype.h - cílem projektu je naučit se implementovat dané funkce ručně
- volání z rodiny malloc a free - práce s dynamickou pamětí není v tomto projektu zapotřebí
- volání z rodiny fopen, fclose, fscanf, ... - práce se soubory (dočasnými) není v tomto projektu žádoucí
- volání funkce exit
## Příklady vstupů a výstupů
Pomocný soubor se seznamem hesel:
```
$ cat hesla.txt
1234567890
Password
Heslo123
Mojevelmidlouhehesloscislem0
IZP2021:[email protected]
```
Příklady spuštění:
```
./pwcheck 1 1