Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Szyfrowanie i odszyfrowywanie danych z bazy
piotras
post 12.02.2013, 14:05:57
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

Ostrzeżenie: (0%)
-----


Witam,

mam zaszyfrowane dane w bazie (za pomocą mcrypt). Dane do tej bazy wstawiałem poprzez skrypt PHP, w której była taka funkcja:

  1. function encrypt($string, $key) {
  2. $enc = "";
  3. global $iv;
  4. $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv);
  5. return base64_encode($enc);
  6. }


Następnie probuję odczytać te dane w innym skrypcie PHP, który korzysta z takiej funkcji:

  1. function decrypt($string, $key) {
  2. $dec = "";
  3. $string = trim(base64_decode($string));
  4. global $iv;
  5. $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
  6. return $dec;
  7. }



Mam ustawione $key. Nie ustawiam $iv bo nie wiem co to jest. Jakieś 70% danych deszyfruje się ok. W pozostałych mam jednak dziwne znaki, np.: ��r���

Baza ma kodowanie utf8. W sktypcie odczytującym (deszyfrującym) mam ustawienie:

  1. mysql_query('SET NAMES utf8');
  2. mysql_query("SET CHARACTER_SET utf8_unicode_ci");


Kodowanie strony też ustawione na utf-8.

Uprzejmie proszę o pomoc. Z góry dziękuję.

Pozdr
Piotr
Go to the top of the page
+Quote Post
Crozin
post 12.02.2013, 14:10:47
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Wywal tego trima, który może usunąć Ci część wartościowych danych.
2. Dlaczego korzystasz z funkcji, której użycie jest oficjalnie odradzane? http://php.net/manual/en/function.mcrypt-cbc.php
Go to the top of the page
+Quote Post
piotras
post 12.02.2013, 14:14:16
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

Ostrzeżenie: (0%)
-----


Wywalenie trima pomogło. Deszyfruje poprawnie.

Dzięki za pomoc.

Jakiej funkcji powinienem użyć w takim razie?
Go to the top of the page
+Quote Post
sowiq
post 12.02.2013, 14:17:13
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Tak ciężko kliknąć w linka podanego na tacy?

Cytat
This function should not be used anymore, see mcrypt_generic() and mdecrypt_generic() for replacements.
Go to the top of the page
+Quote Post
piotras
post 12.02.2013, 14:27:30
Post #5





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

Ostrzeżenie: (0%)
-----


tak, teraz zauważyłem.

Przepraszam, ze idiotyczne pytanie.

Skorzystałem z przykładu zamieszczonego na powyższych stronach:

  1. $cc = 'my secret text';
  2. $key = 'my secret key';
  3. $iv = '12345678';
  4.  
  5. $cipher = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc','');
  6.  
  7. mcrypt_generic_init($cipher, $key, $iv);
  8. $encrypted = mcrypt_generic($cipher,$cc);
  9. mcrypt_generic_deinit($cipher);
  10.  
  11. mcrypt_generic_init($cipher, $key, $iv);
  12. $decrypted = mdecrypt_generic($cipher,$encrypted);
  13. mcrypt_generic_deinit($cipher);
  14.  
  15. echo "encrypted : ".$encrypted;
  16. echo "<br>";
  17. echo "decrypted : ".$decrypted;


Jednak tym razem też dostaję krzaki: �[p�q�H�����

Co robić?
Go to the top of the page
+Quote Post
sowiq
post 12.02.2013, 14:35:45
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A mi Twój kod pokazuje coś takiego
Kod
encrypted : ë[pÈq“HãˆÝÔã–
decrypted : my secret text


Podejrzewam, że Twoja przeglądarka ustawiła sobie domyślne kodowanie znaków inne niż UTF-8.
Go to the top of the page
+Quote Post
piotras
post 12.02.2013, 14:44:52
Post #7





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

Ostrzeżenie: (0%)
-----


Mam ustawione domyślnie na UTF-8

Dla testu zmieniłem ustawienie na nasze ISO środkowoeuropejskie i krzaki zniknęły (pojawiło się to, co tobie).

Zmieniłem więc kodowanie pliku php na ISO-8859-2 w nadziei, że zadziała przy domyślnych ustawieniach przeglądarki ale to nie pomogło.

Co zrobić, aby wyświetlało się to poprawnie przy domyślnym ustawieniu przeglądarki na UTF?

Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
sowiq
post 12.02.2013, 15:01:15
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Kolego, ale co Cię obchodzi jakie krzaki otrzymasz po zakodowaniu? To mogą być jakieś binarne dane, które przeglądarka próbuje zinterpretować jako znaki. W zależności od rodzaju kodowania, przeglądarka może to wyświetlać jako znaki typu ã bądź �. Dla Ciebie najważniejsze jest, czy po użyciu tego ciągu jesteś w stanie odkodować ciąg wejściowy.

PS. nie dość, że u siebie masz krzaczki, to jeszcze i na forum popsułeś polskie znaki wink.gif
Go to the top of the page
+Quote Post
piotras
post 12.02.2013, 15:07:32
Post #9





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

Ostrzeżenie: (0%)
-----


Czyli jeżeli chce te zaszyfrowane dane wstawić do bazy to pola w bazie nie mogą być varchar/test tylko blob, tak?


Go to the top of the page
+Quote Post
Crozin
post 12.02.2013, 17:55:45
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Masz dwie opcje:
1. Skorzystać z jakiegoś typu kolumny przeznaczonego na dane binarne, np. wspomniany przez Ciebie BLOB.
2. Potraktować dane base64_encode po zaszyfrowaniu i base64_decode przed ich odszyfrowaniem.

Pierwsze rozwiązanie może być nieco uciążliwe w przypadku gdy będziesz chciał te dane gdzieś przesyłać/przechowywać w przypadku gdzie środowisko jest nastawione do pracy z danymi tekstowymi, nie binarnymi. Drugie generuje nieco obciążenia dla maszyny i dysku/sieci (związane jest to z koniecznością za(od)kodowania base64 oraz zwiększonym rozmiarem (w bajtach) danych zakodowanych base64).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 14:07