Autor | Zpráva | ||
---|---|---|---|
potom Profil |
#1 · Zasláno: 5. 2. 2020, 20:17:47
Dobrý den, data mám šifrována na úrovni PHP pomocí funkce
function encr($data) { $key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; $encryption_key = base64_decode($key); $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv); return base64_encode($encrypted . '::' . $iv);} a následně jsou uložena do databáze. Chci se zeptat, zda je reálne data dešifrovat na úrovni MYSQL, abych v nich mohl vyhledávat. Zkoušel jsem to pomocí AES_ENCRYPT, ale asi něco dělám špatně, nebo tomu moc nerozumím, možná mám použít DECRYPT, nebo to možná ani nejde? Vlastně mi tam chybí ještě dekodování base64. Poradí mi prosím někdo, jak ten dotaz naformulovat, pokud to vůbec jde? $sql = "SELECT * FROM `reservation` WHERE email = AES_ENCRYPT('".$vyhledavany_nesifrovany_retezec."', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') "; Děkuji za případné rady. |
||
lionel messi Profil |
potom:
„Vlastně mi tam chybí ještě dekodování base64.“ S tým by ti mala pomôcť funkcia FROM_BASE64. „možná mám použít DECRYPT“ Áno, určite treba v tvojom prípade AES_DECRYPT. Pomocou funkcie ENCRYPT ich ešte raz zašifruješ. Čo robia funkcie decode/decrypt a encode/encrypt (platí aj pre PHP, nielen SQL) sa dá ľahko zapamätať aj bez znalosti angličtiny: • Ak chcem niečo dešifrovať či dekódovať, potrebujem funkciu de*. • Inak potrebujem funkciu en*. |
||
Kajman Profil |
#3 · Zasláno: 5. 2. 2020, 22:44:47
Nemůže se takto klíč objevit v lozích serveru?
|
||
potom Profil |
#4 · Zasláno: 5. 2. 2020, 23:05:44
Asi určitě, snažím se vytvářet překážky k vykradení osobních údajů. Toto je taková rychlovka, která mě napadla a kterou jsem byl schopný rychle realizovat, ale neumím v takto šifrovaných datech vyhledávat.
Resp. jsem smolil něco ve smyslu.... .... WHERE email = AES_DECRYPT(FROM_BASE64('".$vyhledavany_nesifrovany_retezec."'), 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') USING 'utf8' ) ale to nefunguje. Poradíte lepší řešení, aby byla zachována možnost třeba fulltextového vyhledávání v databázi? Potřebuji mít šifrována jen tři pole v tabulce - jmeno, email, telefon. Ostatní bych měl rád nešifrované. Není to bankovnictví, ale v dnešní době GDPR se snažím být opatrný... Díky za rady |
||
Časová prodleva: 4 dny
|
|||
potom Profil |
#5 · Zasláno: 9. 2. 2020, 18:25:30
Tak se s tím stále peru, začal jsem šifrovat takto
UPDATE `reservation` SET `name_encrypted`= HEX(AES_ENCRYPT ('Novák', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')) WHERE (`id`='20604') ale nedaří se mi to vypsat. Poradíte, kde dělám chybu? SELECT name_encrypted, UNHEX(AES_DECRYPT(name_encrypted, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')) FROM reservation; |
||
Kajman Profil |
#6 · Zasláno: 9. 2. 2020, 18:38:23
Přijde mi to nesmyslné. Stejně ten tajný klíč máte jak v aplikaci, co se připojuje k databázi, tak v dotazech, co děláte. Jen to bude nesmyslně pomalé, ale bezpečnost se tím zrovna moc nezvýší.
Smysl by dávalo snad jen šifrování celé databáze nebo disku. Samozřejmě na vlastním stroji, ale pokud to myslíte s bezpečnostní vážně, jiste nepoužíváte sdílený webhosting. |
||
Keeehi Profil |
#7 · Zasláno: 10. 2. 2020, 01:36:30
potom:
Souhlasím s Kajmanem, že je to zbytečnost co děláš. Co se chyby týče, tak funkce pro rozšifrování musíš volat v opačném pořadí, než při šifrování. SELECT name_encrypted, AES_DECRYPT(UNHEX(name_encrypted, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')) FROM reservation; |
||
Časová prodleva: 4 roky
|
0