IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: AES‑256 v PHP

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Neaktivní uživatel:16.6.2018 21:15

Existuje nějaká možnost jak používat šifrování AES‑256 v PHP?

Chci docílit: Použít v PHP šifrování AES‑256 :)

Odpovědět
16.6.2018 21:15
Neaktivní uživatelský účet
Avatar
Nahoru Odpovědět
16.6.2018 22:15
Chybami se člověk učí, běžte se učit jinam!
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Uživatel sítě
Petr Čech:16.6.2018 22:31

Je moc nebezpečné požívat přímo šifrovací funkce, pokud člověk neví, co přesně dělá. To potom vede třeba k věcem jako konstantní IV, nepočítání MAC, padding oracle...
Lepší je najít nějakou knihovnu, co to všechno dělá sama. Našel jsem např. https://github.com/…s-encryption , vypadá docela ok, ale zdá se poměrně stará :/

Nahoru Odpovědět
16.6.2018 22:31
the cake is a lie
Avatar
Neaktivní uživatel:17.6.2018 7:15

Nebo stačí jen sha-256?

Editováno 17.6.2018 7:15
Nahoru Odpovědět
17.6.2018 7:15
Neaktivní uživatelský účet
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:17.6.2018 11:05

SHA a AES jsou naprosto rozdílné věci, takže může, ale rozhodně ne na šifrování. Dokonce i ta čísla 256 mají úplně jiný význam.

AES je symetrická šifra. To znamená, že dostane

  1. Plaintext - co chceš zašifrovat
  2. IV=inicializační vektor - náhodná sekvence bytů, která zaručí, že výsledek bude jiný i pokud bude stejným klíčem šifrovat stejný plaintext. Proto v žádném případně nesmí být IV někde natvrdo napsaný, ale musí se generovat náhodně. IV není tajný a normálně se připojuje k zašifrovanému textu.
  3. Klíč - pevně dlouhá sekvence bytů, pro AES je to buď 128, nebo 256 bitů - proto to číslo
  4. Mód - AES může pracovat v několika módech určených pro různé účely. Pokud se použije špatný mód, může to naprosto zásadně ovlivnit, jak silné to šifrování je. Pokud nevíš, vždy použij CBC

To všechno se zchroustá a vypadne z toho zašifrovaný text. Pokud použiješ dešifrovací funkci se stejným vstupem, dostaneš zpět plaintext.

SHA
Jsou hashovancí funkce z rodiny SHA. Hashovací funkce vezme jeden vstup a udělá z něj fixně daný výstup - hash (otisk). Sebemenší změna ve vstupu se projeví úplně jiným hashem.
Důležitou vlastností hashovacích funkcí je, že se od hashe nelze dostat zpět k původnímu vstupu.
To je užitečné např. pro kontrolování, že máš stejný soubor, co si očekával, že se stáhne - u sebe spočítáš hash souboru a porovnáš s hashem na webu - a celý soubor se porovnal pomocí pár desítek znaků.
To to také používá u hesel, kde se neuloží heslo samotné, ale hash (plus nějaká omáčka). POZOR, heslo jsou komplikovanější a je lepší používat vestavěné funkce password_hash a password_verify.

Nahoru Odpovědět
17.6.2018 11:05
the cake is a lie
Avatar
Odpovídá na Petr Čech
Uživatel sítě :17.6.2018 11:21

Počítám s tím, že si projde manuál k tomu, proto jsem poslal linky přímo na to, co žádal.

Nahoru Odpovědět
17.6.2018 11:21
Chybami se člověk učí, běžte se učit jinam!
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:17.6.2018 14:48

Šifrování:

$encrypted = openssl_encrypt($text, "AES-256-ECB", $key);

Dešifrování:

$text = openssl_decrypt($encrypted, "AES-256-ECB", $key);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
17.6.2018 14:48
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Šimon Rataj
Martin Dráb:17.6.2018 17:47

Na šifrování delších věcí bych ECB opravdu nedoporučoval, protože:

  • každých n bajtů změní na jiných n bajtů (n je velikost bloku, pro AES 16),
  • stejný otevřený text se vždy šifruje na stejný šifrový text, takže útočník pozná, když posíláš stejnou zprávu. V případě, že ví něco víc o charakteru otevřeného textu (např. že je to anglický text), dokáže jej pečíst na základě frekvenční analýzy výskytu n-tic,

Samotná symetrická se ti (podle předpokladu) bezpečně postará o data velikosti jednoho bloku. Na delší data potřebuješ ji pustit v určitém módu (CBC, CTR, ...), případně s použitím rozumného zarovnání (padding).

Nahoru Odpovědět
17.6.2018 17:47
2 + 2 = 5 for extremely large values of 2
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Martin Dráb
Jindřich Máca:17.6.2018 18:02

Moc se omluvám, to mělo být +1... #dotykovydisplay

 
Nahoru Odpovědět
17.6.2018 18:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.