Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaszyfrowane rekordy i SELECT
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Blackhole
Witam.

Otóz mam duży (jak dla mnie) problem do rozwiązania. Szyfruję sobie dane do bazy funkcją php. I teraz jest problem, jak wykonać szukanie w takiej bazie, skoro dane są zaszyfrowane. Wnioskuję, że przed wykonaniem SELECT-a powinna wykonać się funkcja rozszyfrowująca dane, by ten SELECT działał już na danych odkodowanych. Nie wiem jednak, jak się do tego zabrać i czego szukać.

Czy można jakoś łatwo zamienić to szyfrowanie w php jakąś funkcją, która będzie zapisana w bazie i wywoływana w trakcie wpisywania danych?

Proszę o pomoc.
dr_bonzo
Cytat
Czy można jakoś łatwo zamienić to szyfrowanie w php jakąś funkcją, która będzie zapisana w bazie i wywoływana w trakcie wpisywania danych?

Raczej tak, ale na pisaniu funkcji w DB sie nie znam.

Cytat
Szyfruję sobie dane do bazy funkcją php. I teraz jest problem, jak wykonać szukanie w takiej bazie, skoro dane są zaszyfrowane.

  1. SELECT *
  2. FROM tabela WHERE DATA = funkcja_szyfrujaca_w_php( $dane )
i nie musisz odszyfrowywac danych przed selectem, dopiero dekodujesz dane zwrocone przez SQLa.
Blackhole
Ok. Wiem już, jak tworzyć funkcje w pl/pgsql. Chciałbym teraz się dowiedzieć, czy w tym języku można wykonywać działania arytmetyczne lub działania na łańcuchach znaków podobnie, jak to jest w php? W manualu jeszcze tego nie znalazłem sad.gif
dr_bonzo
Latwiej i szybciej bedzie zaszyfrowac dane do SELECTa niz odszyfrowac cala tabele i w niej wyszukiwac.

Cytat
czy w tym języku można wykonywać działania arytmetyczne lub działania na łańcuchach znaków podobnie, jak to jest w php?

Jak pisalem nie znam sie na tym, ale jezyk programowania bez takich mozliwosci jest nieprzydatny - wnioskuje wiec ze jest to mozliwe.
SongoQ
Napisz sobie funkcyjke w pg i wtedy wszystko zostanie po stronie DB
Blackhole
Ja myślę, by zrobić tak.

szyfrowanie:
  1. INSERT
  2. INTO tabela (kolumna) VALUES (plpgsql_crypt(wartosc,klucz));
gdzie plpgsql_crypt to napisana przeze mnie w plpgsql funkcja szyfrująca.

wybór rekordu:
  1. SELECT kolumna
  2. FROM tabela WHERE kolumna LIKE '%' || plpgsql_decrypt(kolumna,klucz) || '%';
Muszę się "tylko" jeszcze dowiedzieć, jak napisać te funkcje.

Co o tym myślicie?
SongoQ
dokladnie tak, teraz tylko wymysl jakis algorytm kodujacy i dekodujacy i bedzie ok.
Blackhole
Tak mi się nasunęło...
Wybieranie odpowiedniego wiersza z bazy powinno mieć chyba postać:
  1. SELECT plpgsql_decrypt(kolumna,klucz)
  2. FROM tabela WHERE plpgsql_decrypt(kolumna,klucz) LIKE '%szukane_slowo%';
bo inaczej dostawałbym w wyniki zaszyfrowane dane, a przecież do wyświetlenia potrzebne są dane możliwe do odczytania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.