Skúška 5.2.2020
- Je povolené používať svoj (už existujúci) kód a tiež internet na vyhľadanie informácii týkajúcich sa syntaxe jazyka C#, metód a pod. Nie je povolené komunikovať cez Internet (ani inak) s použitím mailu, chatu, Facebooku a pod. Porušenie tohto zákazu je dôvodom pre vylúčenie zo skúšky s hodnotením 0 bodov. Nie je povolená žiadna forma plagiátorstva (čiastkové riešenia problémov môžete použiť, v takomto prípade uveďte do komentárov URL).
- V prípade, že bude odhalený pokus o podvod, všetci zúčastnení na podvode budú vylúčení zo skúšky s hodnotením 0 bodov.
- Ak sú v zadaní uvedené názvy tried, premenných a metód, používajte presne tie mená, ktoré sú uvedené v zadaní.
- Dodržanie bodov uvedených v podmienkach akceptácie zadania – rovnaké podmienky platili pri zápočte.
- Uznané bude len riešenie, ktoré je možné skompilovať a spustiť na testovacom počítači (na ktorom sa budú spúšťať všetky zadania).
- Hotové zadanie nahrajte na Hades - nezabudnite pred zabalením dať clean solution (a vymazať skrytý priečinok .vs)
Na vypracovanie zadania máte 60 minút. Použite konzolovú aplikáciu. Body sa prideľujú iba ak je študent schopný obhájiť svoj kód, nestačí, že to je napísané.
Ak používate kód prebraný z internetu, je nutné uviesť zdroj.
Dnes budeme analyzovať heslá dostupné na stránke Have I been pwned? (HIBP)
Vytvorte si rozhrania:
public interface IHashEncoder
{
public string ToHash(string input);
}
public interface IFileReader
{
IEnumerable<string> GetData();
}
public interface ITextWriter
{
void Write(string text, bool append);
void NewLine();
}
Úloha 1
(20 bodov)
Vytvorte si triedu HibpFileReader : IFileReader
a zabezpečte postupné načítavanie dát zo súboru. Skutočný súbor má 25.1GB. Správajte sa tak, akoby ste pracovali so skutočným súborom - načítavajte dáta postupne(20 bodov). Ak si neviete dať rady, môžete si prácu zjednodušiť a načítať súbor naraz (maximálne 8 bodov).
rada: počet výskytov nepotrebujete k riešeniu zadania
Úloha 2
Vytvorte si triedu SHA1Encoder : IHashEncoder
ktorá bude slúžiť na výpočet hashu zadaného hesla. Na samotný výpočet môžete použiť:
using System.Linq;
using System.Security.Cryptography;
// some other stuff, you should know by now where should each line go
using (var sha = new SHA1Managed())
{
return string.Join("", (sha.ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray());
}
Vytvorte si triedu HibpFacade
ktorá bude mať funkciu na overenie výskytu hesla (poslané ako plaintext string) načítaného z konzoly v maine. Pomocou návrhového vzoru facade zabezpečte, že sa toto heslo overí a vráti sa výsledok, či bola nájdená zhoda alebo nie.
Úloha 3
(10bodov)
Vytvorte si triedu HibpConsoleWriter : ITextWriter
a implementujte ju nasledovne:
-
Write
- vypíše odoslaný text do konzoly, ale neposunie sa na nový riadok. Príznakappend
nám udáva, či sa má riadok prepísať (znak carriage return je rovnaký ako v C'\r'
) alebo pokračovať vo výpise na danom riadku. -
NewLine
- Pridá nový riadok.
Využite túto triedu v HibpFacade
na informovanie užívateľa o priebehu spracovania + pridajte pokec na začiatok.
Ďalšie body
Dodržanie zapúzdrenia, coding guidelines (5 bodov)