2012-02-20 16 views
8

Mam serwer internetowy z mysql i php, który wysyła dane do łańcucha json.Jaki jest najlepszy sposób szyfrowania/odszyfrowywania łańcucha jsonów

Mam drugi serwer internetowy, który odczytuje dane, a następnie wyświetla je.

Wszystko działa dobrze w tej chwili.

Potrzebuję dodać pewne poufne dane do łańcucha, więc zastanawiałem się, jaki jest najlepszy sposób szyfrowania/odszyfrowywania json za pomocą php?

Czy ktoś może pomóc !?

+0

Czy za biblioteki szyfrowania? – JohnFx

Odpowiedz

9

Założę się, że najlepszym sposobem jest użycie SSL (HTTPS) i polecam przeczytać OWASP Guide, a zwłaszcza How-To section.

+0

Zgoda. HTTPS jest drogą. Nie możesz czekać do ostatniej chwili i zdecydować, że chcesz wysłać coś "potajemnie". Musisz mieć wspólny sekret. Jeśli nie masz wspólnego hasła, użyj protokołu HTTPS, ponieważ obsługuje go on. Po co się odradzać? –

1

Zapisz klucz prywatny na serwerze i użyj szyfrowania DES; to algorytm dwukierunkowy.

EDIT:

za komentarze, wydaje ja błędnie interpretowane na pytanie. Moim założeniem było, że OP chciałby wysyłać zaszyfrowane dane w Internecie, jak w e-mailu lub czymś, po czym odzyskać dane w późniejszym czasie i móc je odszyfrować. Na pewno wyjaśnię to poprzez komentarze w przyszłości przed przesłaniem odpowiedzi.

+0

Cóż, udało mi się zaszyfrować jsona, ale nie rozumiem, jak go odszyfrować lub znaleźć kod do odszyfrowania ... – Steve

+0

czy proponujesz ponowne wynalezienie protokołu SSL? – alexsuslin

+0

Wygląda na to, że nie możesz znaleźć tego pytania: http://stackoverflow.com/questions/610048/rsa-encryption-decryption-compatible-with-javascript-and-php – alexsuslin

13

Zawsze lubiłem mcrypt

//Key 
$key = 'SuperSecretKey'; 

//To Encrypt: 
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, 'I want to encrypt this', MCRYPT_MODE_ECB); 

//To Decrypt: 
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_ECB); 

Jeśli to coś, czego szukasz. Będzie traktować JSON jako ciąg, a następnie po odszyfrowaniu będziesz musiał wykonać swoją json_decode() lub cokolwiek innego, co robisz.

+0

W zasadzie sugerowałem, że podałeś tylko właściwy kod; ładnie wykonane! – quickshiftin

0

Zastosowanie Otwarte SSL:

http://www.php.net/manual/en/book.openssl.php

Można wygenerować parę kluczy publiczny/prywatny bez potrzeby https jeśli jest niedostępny.

+0

Przez "parę klucza publicznego/prywatnego" Zakładam, że masz na myśli asymetryczne szyfrowanie RSA. RSA nie jest przeznaczony do szyfrowania danych, jest powolny, a długość danych, które może zaszyfrować, musi być mniejsza niż rozmiar klucza. – zaph

5

To naprawdę zależy od wrażliwości danych. Jednak z mojego doświadczenia wynika, że ​​proste szyfrowanie php zwykle robi lewę. Zazwyczaj szyfruję wrażliwe pola w polach danych json przed zakodowaniem ich do łańcucha json.

Oto kod części szyfrowania.

$ key = 'hasło do (en/de) crypt'; $ string = 'ciąg do zaszyfrowania'; // Uwaga przestrzenie

Szyfrowanie:

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 

odszyfrować:

$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 

Jednakże, należy zawsze hash (MD5, SHA1) haseł, zwłaszcza z niektórymi Sól.

+0

Sól nie może być dłuższa niż 24 znaki z MCRYPT_RIJNDAEL_256. Pozostałe są pocięte i pojawia się ostrzeżenie. Preferuj substr (md5 ($ salt), 0, 24), jeśli chcesz używać MD5. – Gabriel

+0

Najlepiej nie używać PHP mcrypt, jest to program abandonware, nie był aktualizowany od lat i nie obsługuje standardowego wypełniania PKCS # 7 (z n. PKCS # 5), a jedynie niestandardowe wypełnianie zerowe, którego nie można używać nawet z dane binarne. mcrypt ma wiele wybitnych [błędów] (https://sourceforge.net/p/mcrypt/bugs/) sięga 2003 roku. Rozszerzenie mcrypt jest przestarzałe zostanie usunięte w PHP 7.2. Zamiast tego rozważ użycie [rozbroić] (https://github.com/defuse/php-encryption) lub [RNCryptor] (https://github.com/RNCryptor), zapewniają kompletne rozwiązanie i są utrzymywane i są poprawne. – zaph

-1

Oczywiście do bezpiecznego przesyłania danych w Internecie potrzebny jest protokół SSL (HTTPS).

Mimo to, wciąż istnieją powody do szyfrowania danych json, zanim je wysłałeś.

Miałem problem z szyfrowaniem danych json. Zostało to spowodowane przez "\ t" w danych json. Musisz je usunąć przed szyfrowaniem. W przeciwnym razie wystąpi problem, gdy chcesz odszyfrować go z powrotem do formatu json propper.

$ plain_txt = str_replace ("\ r", "", $ plain_txt);

$ plain_txt = str_replace ("\ n", "", $ plain_txt);

$ plain_txt = str_replace ("\ t", "", $ plain_txt);

Zobacz przykład robocza: https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba

Powiązane problemy