Zasadnicza różnica między algorytmami Haszującymi i szyfrującymi

Widzę wiele nieporozumień między hashami a algorytmami szyfrowania i chciałbym usłyszeć kilka bardziej fachowych porad na temat:

  1. Kiedy używać hashów vs encryptions

  2. Czym różni się algorytm hash lub szyfrowania (od poziomu teoretycznego / matematycznego) czyli co sprawia, że hasze są nieodwracalne (bez pomocy tęczowego drzewa)

Oto kilka podobnych więc pytania, które nie były tak szczegółowe jak ja Szukam:

Jaka jest różnica między zaciemnieniem,Haszowaniem i szyfrowaniem?
różnica między szyfrowaniem a hashowaniem

Author: Community, 2011-02-09

13 answers

Możesz to sprawdzić w Wikipedii ... Ale skoro chcesz wyjaśnienia, postaram się tutaj: {]}

Funkcje Hash

Zapewniają mapowanie pomiędzy wejściem o dowolnej długości, a wyjściem o (zazwyczaj) stałej długości (lub mniejszej długości). Może to być wszystko, od prostego crc32, po pełnowymiarową kryptograficzną funkcję skrótu, taką jak MD5 lub SHA1/2/256/512. Chodzi o to, że dzieje się mapowanie jednokierunkowe. Zawsze jest wiele:1 (czyli będzie zawsze kolizje), ponieważ każda funkcja generuje mniejsze wyjście niż jest w stanie wprowadzić (jeśli wrzucisz każdy możliwy plik 1mb do MD5, otrzymasz mnóstwo kolizji).

Powodem, dla którego trudno (lub w praktyce niemożliwe) jest ich odwrócenie, jest to, jak działają wewnętrznie. Większość funkcji skrótu kryptograficznego jest wielokrotnie powtarzana nad zestawem wejściowym, aby wygenerować wyjście. Jeśli więc przyjrzymy się każdemu kawałkowi o stałej długości wejścia (który jest zależny od algorytmu), funkcja hash nazwę to aktualnym stanem. Następnie zmieni stan na nowy i użyje go jako sprzężenia zwrotnego (MD5 robi to 64 razy dla każdego 512-bitowego fragmentu danych). Następnie w jakiś sposób łączy Stany wynikowe ze wszystkich tych iteracji, tworząc wynikowy hash.

Teraz, jeśli chcesz dekodować hash, musisz najpierw dowiedzieć się, jak podzielić podany hash na jego iteracyjne Stany (1 Możliwość dla wejść mniejszych niż rozmiar fragment danych, wiele dla większych wejść). Wtedy musiałbyś odwrócić iterację dla każdego stanu. Teraz, aby wyjaśnić, dlaczego jest to bardzo trudne, wyobraź sobie próbę wydedukowania a i b z następującego wzoru: 10 = a + b. Istnieje 10 pozytywnych kombinacji a i b, które mogą zadziałać. Teraz pętla nad tym kilka razy: tmp = a + b; a = b; b = tmp. Dla 64 iteracji, masz ponad 10^64 możliwości, aby spróbować. A to tylko prosty dodatek, gdzie jakiś stan jest zachowany od iteracji do iteracji. Real hash funkcje wykonujÄ ... duĹźo wiÄ ™ cej niĹź 1 operacjÄ ™ (MD5 wykonuje okoĹ ' o 15 operacji na 4 zmiennych stanowych). A ponieważ następna iteracja zależy od stanu poprzedniego, a poprzedni jest niszczony podczas tworzenia bieżącego stanu, nie jest możliwe określenie stanu wejściowego, który doprowadził do danego stanu wyjściowego(dla każdej iteracji nie mniej). Połącz to z dużą liczbą możliwości, a dekodowanie nawet MD5 zajmie prawie nieskończoną (ale nie nieskończoną) ilość zasobów. Więc wiele zasobów, które w rzeczywistości jest znacznie tańsze, aby brutalnie wymusić hash, jeśli masz pomysł na rozmiar wejścia (dla mniejszych wejść), niż to jest nawet próbować dekodować hash.

Funkcje Szyfrowania

Zapewniają odwzorowanie 1: 1 pomiędzy wejściem i wyjściem o dowolnej długości. I zawsze są odwracalne. Ważne jest, aby pamiętać, że jest to odwracalne przy użyciu jakiejś metody. I zawsze jest 1: 1 dla danego klucza. Obecnie istnieje wiele par kluczy input:, które może generować to samo wyjście (w rzeczywistości zwykle są, w zależności od funkcji szyfrowania). Dobre zaszyfrowane dane są nieodróżnialne od przypadkowego szumu. Różni się to od dobrego wyniku hashowego, który zawsze ma spójny format.

Przypadki Użycia

Użyj funkcji skrótu, gdy chcesz porównać wartość, ale nie możesz zapisać zwykłej reprezentacji (z wielu powodów). Hasła powinny pasować do tego przypadku bardzo dobrze, ponieważ nie chcesz przechowywać ich zwykłego tekstu dla względy bezpieczeństwa (i nie powinny). Ale co, jeśli chcesz sprawdzić system plików pod kątem pirackich plików muzycznych? Niepraktyczne byłoby przechowywanie 3 mb na plik muzyczny. Zamiast tego weź hash pliku i zapisz go (md5 przechowuje 16 bajtów zamiast 3mb). W ten sposób, po prostu hashujesz każdy plik i porównujesz z przechowywaną bazą hashów (nie działa to tak dobrze w praktyce z powodu ponownego kodowania, zmiany nagłówków plików itp., ale jest to przykładowy przypadek użycia).

Użyj funkcji hash, gdy sprawdzasz poprawność danych wejściowych. Do tego są przeznaczone. Jeśli masz 2 elementy wejściowe i chcesz sprawdzić, czy są takie same, Uruchom oba za pomocą funkcji skrótu. Prawdopodobieństwo kolizji jest astronomicznie niskie dla małych rozmiarów danych wejściowych(przy założeniu dobrej funkcji hash). Dlatego jest zalecany do haseł. Dla haseł do 32 znaków md5 ma 4-krotną przestrzeń wyjściową. SHA1 ma 6 razy większą przestrzeń wyjściową (w przybliżeniu). SHA512 ma około 16 razy przestrzeń wyjściowa. Nie obchodzi cię, jakie było hasło , obchodzi cię, czy jest takie samo, jak to, które zostało zapisane. Dlatego powinieneś używać hashów do haseł.

Użyj szyfrowania, gdy chcesz odzyskać dane wejściowe. Zwróć uwagę na słowo need . Jeśli przechowujesz numery kart kredytowych, musisz je w pewnym momencie odzyskać, ale nie chcesz przechowywać ich jako zwykłego tekstu. Zamiast tego przechowuj zaszyfrowaną wersję i zachowaj klucz tak bezpiecznie, jak to możliwe.

Funkcje Hash są również Świetne do podpisywania danych. Na przykład, jeśli używasz HMAC, podpisujesz fragment danych, przyjmując hash danych skonkatenowanych ze znaną, ale nie przekazaną wartością (wartością tajną). Więc wysyłasz zwykły tekst i HMAC hash. Następnie odbiornik po prostu hashuje przesłane dane ze znaną wartością i sprawdza, czy pasują do przesyłanego HMAC. Jeśli to jest to samo, to wiesz, że nie została naruszona przez imprezę bez tajnej wartości. To jest powszechnie stosowane w bezpiecznych systemach plików cookie przez framework HTTP, a także w transmisji komunikatów danych przez HTTP, gdzie chcesz mieć pewność integralności danych.

Uwaga o hashach dla haseł:

Kluczową cechą kryptograficznych funkcji hashowych jest to, że powinny one być bardzo szybkie w tworzeniu i bardzo trudne/powolne w cofaniu (tak bardzo, że jest to praktycznie niemożliwe). Stwarza to problem z hasłami. Jeśli przechowujesz sha512(password), nie robisz nic, aby zabezpiecz się przed tęczowymi stołami lub atakami brute force. Pamiętaj, że funkcja hash została zaprojektowana z myślą o szybkości. Tak więc jest trywialne dla atakującego, aby po prostu uruchomić słownik za pomocą funkcji hash i przetestować każdy wynik.

Dodanie soli pomaga, ponieważ dodaje trochę nieznanych danych do skrótu. Więc zamiast znaleźć coś, co pasuje md5(foo), muszą znaleźć coś, co po dodaniu do znanej soli produkuje md5(foo.salt) (co jest znacznie trudniejsze do zrobienia). Ale to nadal nie rozwiązuje problem z szybkością, bo jeśli znają sól to tylko kwestia przepuszczania słownika.

Są więc sposoby radzenia sobie z tym. Jedna z popularnych metod nazywa się wzmocnienie klucza (lub rozciąganie klucza). Zasadniczo powtarzasz hash wiele razy (Zwykle tysiące). To robi dwie rzeczy. Po pierwsze, znacznie spowalnia czas działania algorytmu haszującego. Po drugie, jeśli zaimplementowano prawo (przekazywanie danych wejściowych i salt z powrotem w każdej iteracji) faktycznie zwiększa entropię (dostępną przestrzeń) dla wyjścia, zmniejszając szanse kolizji. Trywialną implementacją jest:
var hash = password + salt;
for (var i = 0; i < 5000; i++) {
    hash = sha512(hash + password + salt);
}

Istnieją inne, bardziej standardowe implementacje, takie jak PBKDF2, BCrypt . Ale ta technika jest używana przez sporo systemów związanych z bezpieczeństwem (takich jak PGP, WPA, Apache i OpenSSL).

Podsumowując, hash(password) nie jest wystarczająco dobry. hash(password + salt) jest lepsze, ale wciąż nie wystarczająco dobre... Użyj rozciągniętego mechanizmu haszującego, aby wyprodukować hashe hasła...

Kolejna notka o trywialnym rozciąganiu

W żadnym wypadku nie podawaj wyjścia jednego skrótu bezpośrednio z powrotem do funkcji skrótu:

hash = sha512(password + salt); 
for (i = 0; i < 1000; i++) {
    hash = sha512(hash); // <-- Do NOT do this!
}
Powodem tego są kolizje. Pamiętaj, że wszystkie funkcje hash mają kolizje, ponieważ możliwa przestrzeń wyjściowa (liczba możliwych wyjść) jest mniejsza niż wtedy przestrzeń wejściowa. Aby zobaczyć dlaczego, spójrzmy na to, co się dzieje. Wstępując do tego, przyjmijmy założenie, że istnieje 0,001% szansa kolizji z sha1() (jest to znacznie niższe w rzeczywistości, ale dla celów demonstracyjnych).
hash1 = sha1(password + salt);
Prawdopodobieństwo kolizji wynosi 0,001%. Ale kiedy zrobimy następny hash2 = sha1(hash1);, wszystkie kolizje hash1 automatycznie stają się kolizjami hash2. Więc teraz mamy kurs hash1 na 0.001%, A drugie wywołanie sha1() dodaje do tego. Więc teraz, hash2 ma prawdopodobieństwo kolizji 0.002%. To dwa razy więcej szans! Każda iteracja będzie dodaj kolejną 0.001% szansę kolizji do wyniku. Tak więc przy 1000 iteracjach szansa na kolizję wzrosła z trywialnego 0,001% do 1%. Teraz degradacja jest liniowa, a rzeczywiste prawdopodobieństwo jest daleko mniejsze, ale efekt jest taki sam (oszacowanie szansy na pojedyncze zderzenie z md5 wynosi ok. 1/(2128) lub 1/(3x1038). Chociaż wydaje się to małe, dzięki birthday attack nie jest tak mały, jak wydaje się).

Zamiast tego, dodając za każdym razem sól i hasło, ponownie wprowadzasz dane z powrotem do funkcji hash. Więc wszelkie kolizje z danej rundy nie są już kolizjami z następnej rundy. Więc:

hash = sha512(password + salt);
for (i = 0; i < 1000; i++) {
    hash = sha512(hash + password + salt);
}

Ma taką samą szansę kolizji jak funkcja natywna sha512. Tego właśnie chcesz. Użyj tego zamiast tego.

 752
Author: ircmaxell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 12:15:50

Funkcję hash można uznać za taką samą jak pieczenie bochenka chleba. Zaczynasz od nakładów (mąka, woda, drożdże itp...) , a po zastosowaniu funkcji mieszania (mieszanie + pieczenie) otrzymujemy wyjście: bochenek chleba.

Pójście w drugą stronę jest niezwykle trudne - tak naprawdę nie można oddzielić chleba z powrotem na mąkę, wodę, drożdże - niektóre z nich zostały utracone podczas procesu pieczenia i nigdy nie można powiedzieć dokładnie, ile wody, mąki lub drożdży użyto do szczególny Bochenek, ponieważ informacja ta została zniszczona przez funkcję haszującą (aka piekarnik).

Wiele różnych wariantów wejść teoretycznie produkuje identyczne bochenki (np. 2 szklanki wody i 1 łyżeczka drożdży produkują dokładnie taki sam Bochenek jak 2,1 szklanki wody i 0,9 łyżeczki drożdży), ale biorąc pod uwagę jeden z tych bochenków, nie można dokładnie powiedzieć, co kombi wejść produkowało go.

Szyfrowanie, z drugiej strony, może być postrzegane jako skrytka depozytowa. Cokolwiek tam umieścisz wraca, o ile posiadasz klucz, którym był zamknięty. To operacja symetryczna. Biorąc pod uwagę klucz i pewne wejście, otrzymujesz określone wyjście. Biorąc pod uwagę to wyjście i ten sam klucz, odzyskasz oryginalne wejście. Odwzorowanie 1:1.

 163
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-09 17:40:26

Użyj skrótów, gdy nie chcesz odzyskać oryginalnego wejścia, użyj szyfrowania, gdy to zrobisz.

Hasze pobierają pewne dane wejściowe i zamieniają je na kilka bitów (zwykle traktowane jako Liczba, jak 32-bitowa liczba całkowita, 64-bitowa liczba całkowita itp.). To samo wejście zawsze będzie produkować ten sam hash, ale zasadniczo tracisz informacje w procesie, więc nie możesz wiarygodnie odtworzyć oryginalnego wejścia(jest jednak kilka zastrzeżeń).

Szyfrowanie informacje, które wprowadzasz do funkcji szyfrowania, po prostu utrudniają (najlepiej uniemożliwiają) każdemu cofnięcie się do oryginalnego wejścia bez posiadania określonego klucza.

Prosty przykład hashowania

Oto trywialny przykład, który pomoże Ci zrozumieć, dlaczego hashowanie nie może (w ogólnym przypadku) odzyskać oryginalnego danych wejściowych. Powiedzmy, że tworzę 1-bitowy hash. Moja funkcja hash pobiera bit string jako wejście i ustawia hash na 1, jeśli jest parzysta liczba bitów ustawiona w łańcuch wejściowy, w przeciwnym razie 0, jeśli była liczba nieparzysta.

Przykład:

Input    Hash
0010     0
0011     1
0110     1
1000     0

Zauważ, że istnieje wiele wartości wejściowych, które powodują hash 0, i wiele, które powodują hash 1. Jeśli wiesz, że hash jest równy 0, nie możesz być pewien, jakie było oryginalne dane wejściowe.

Przy okazji, ten 1-bitowy hash nie jest do końca wymyślony... spójrz na bit parzystości .

Prosty przykład szyfrowania

Możesz zaszyfrować tekst za pomocą prostej litery podstawienie, powiedzmy, że jeśli wejście jest A, piszesz B. Jeśli wejście jest B, piszesz C. aż do końca alfabetu, gdzie jeśli wejście jest Z, piszesz a ponownie.

Input   Encrypted
CAT     DBU
ZOO     APP

Podobnie jak w prostym przykładzie hash, ten typ szyfrowania był używany historycznie.

 47
Author: Eric J.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-09 17:40:28

Podstawowe omówienie technik haszowania i szyfrowania / deszyfrowania to.

Hashowanie:

If you hash any plain text again you can not get the same plain tekst z zaszyfrowanego tekstu . Po prostu jest to proces jednokierunkowy.

hashing


Szyfrowanie i deszyfrowanie:

If you encrypt any plain text with a key again you can uzyskaj ten sam zwykły tekst, wykonując deszyfrowanie na zaszyfrowanym tekście tym samym(symetrycznym)/innym(asymetrycznym) kluczem.

szyfrowanie i deszyfrowanie


Aktualizacja: Aby odnieść się do punktów wymienionych w edytowanym pytaniu.

1. Kiedy używać hashów vs szyfrowanie

Hashowanie jest przydatne, jeśli chcesz wysłać komuś plik. Ale boisz się, że ktoś inny może przechwycić plik i zmienić go. So a sposób, że odbiorca może upewnić się, że jest to właściwy plik, jeśli publikujesz wartość hash publicznie. W ten sposób odbiorca może obliczyć wartość hash otrzymanego pliku i sprawdź, czy odpowiada hashowi wartość.

Szyfrowanie jest dobre, jeśli mówisz, że masz do kogoś wiadomość. Szyfrujesz wiadomość kluczem, a odbiorca odszyfrowuje za pomocą ten sam (a może nawet inny) klucz, aby odzyskać oryginalną wiadomość. napisy


2. Czym różni się hash lub algorytm szyfrowania (od poziomu teoretycznego / matematycznego), czyli co sprawia, że hash jest nieodwracalny (bez pomocy tęczowego drzewa)

W zasadzie haszowanie jest operacja, która traci informacje, ale nie szyfruje . Spójrzmy na różnica w prosty sposób matematyczny dla naszego łatwego zrozumienia , oczywiście obie mają znacznie bardziej skomplikowane operacje matematyczne z powtórzenia związane z it

Szyfrowanie/Deszyfrowanie (Odwracalne):


Dodanie :

4 + 3 = 7  

Można to odwrócić, biorąc sumę i odejmując jeden z addends

7 - 3 = 4     

Mnożenie :

4 * 5 = 20  

Można to odwrócić, biorąc produkt i dzieląc przez jeden z czynniki

20 / 4 = 5    

Możemy więc założyć, że jeden z addends/Factor jest kluczem dekrypcji, a wynik (7,20) jest zaszyfrowanym tekstem.


Hashing (Not Odwracalne): {]}


Podział Modulo :

22 % 7 = 1   

Tego nie można odwrócić, ponieważ nie ma operacji, którą można wykonać dla ilorazu i dywidendy do odtworzyć dzielnik (lub odwrotnie).

Można znaleźć operację, aby wypełnić gdzie'? jest?

1  ?  7 = 22  
1  ?  22 = 7

Więc funkcje hashowe mają taką samą matematyczną jakość jak dzielenie modulo i tracą informacje.

Kredyty

 44
Author: mrsrinivas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-24 03:06:14

Moje dwie wkładki... Ogólnie Rzecz Biorąc, ankieter chciał poniższej odpowiedzi.

Haszowanie jest w jeden sposób . Nie można przekonwertować danych / ciągów z kodu hashowego.

Szyfrowanie jest dwukierunkowe - możesz ponownie odszyfrować zaszyfrowany ciąg, jeśli masz klucz ze sobą.

 27
Author: Shiv Mohan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-21 12:28:03

A funkcja Hash zamienia tekst o zmiennej wielkości w tekst o stałej wielkości.

Hash

Źródło: https://en.wikipedia.org/wiki/Hash_function


Funkcje Hashowe w PHP

Hash zamienia łańcuch znaków na łańcuch hashowany. Patrz poniżej.

HASH:

$str = 'My age is 29';
$hash = hash('sha1', $str);
echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e

Hasła są zazwyczaj przechowywane w ich zaszyfrowanej reprezentacji zamiast w postaci czytelnego tekstu. Gdy użytkownik końcowy chce uzyskać dostęp do aplikacji zabezpieczony hasłem hasło musi być podane podczas uwierzytelniania. Gdy użytkownik poda swoje hasło, poprawny System Uwierzytelniania otrzymuje hasło i hashuje to hasło. Hash tego hasła jest porównywany do hasha znanego przez system. Dostęp jest przyznawany w przypadku równości.

DEHASH:

SHA1 jest jednokierunkowym Hashem. Co oznacza, że nie możesz odhaszać haszu.

Jednak można brutalnie wymusić hash. Zobacz też: https://hashkiller.co.uk/sha1-decrypter.aspx .

MD5, to kolejny hash. Dehasher MD5 można znaleźć na tej stronie: https://www.md5online.org/.

Aby utrudnić ataki brute-force na hasze, można podać sól. W php możesz użyć password_hash() do utworzenia hasha hasła. Funkcja password_hash() automatycznie tworzy sól. Aby zweryfikować hasło na hash hasła (z salt) użyj password_verify().

// Invoke this little script 3 times, and it will give you everytime a new hash
$password = '1234';  
$hash = password_hash($password, PASSWORD_DEFAULT);  

echo $hash; 
// OUTPUT 

$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu 

$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u 

$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW

Jedno hasło może być reprezentowane przez więcej niż jedno hash. Po zweryfikowaniu hasła za pomocą różnych skrótów haseł za pomocą password_verify(), hasło zostanie zaakceptowane jako prawidłowe hasło.

$password = '1234';  

$hash = '$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW';  
var_dump( password_verify($password, $hash) );

// OUTPUT 

boolean true 

boolean true 

boolean true




Funkcja szyfrowania przekształca tekst w bezsensowny tekst szyfrowy za pomocą klucza szyfrującego i odwrotnie. Tutaj wpisz opis obrazka

Źródło: https://en.wikipedia.org/wiki/Encryption


Szyfrowanie w PHP

Zagłębimy się w kod PHP to obsługuje szyfrowanie.

--- rozszerzenie Mcrypt - - -

Szyfrowanie:

$cipher = MCRYPT_RIJNDAEL_128;
$key = 'A_KEY';
$data = 'My age is 29';
$mode = MCRYPT_MODE_ECB;

$encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode);
var_dump($encryptedData);

//OUTPUT:
string '„Ùòyªq³¿ì¼üÀpå' (length=16)

Odszyfrować:

$decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode);
$decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END
var_dump($decryptedData);

//OUTPUT:
string 'My age is 29' (length=12)

- - - rozszerzenie OpenSSL - - -

Rozszerzenie Mcrypt zostało wycofane w wersji 7.1. i usunięte w php 7.2. Rozszerzenie OpenSSL powinno być używane w php 7. Zobacz fragmenty kodu poniżej:
$key = 'A_KEY';
$data = 'My age is 29';

// ENCRYPT
$encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($encryptedData);

// DECRYPT    
$decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($decryptedData);

//OUTPUT
string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24)
string 'My age is 29' (length=12)
 19
Author: Julian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-22 10:04:08

Szyfrowanie Symetryczne:

Szyfrowanie symetryczne może być również określane jako shared key lub shared secret encryption. W szyfrowaniu symetrycznym pojedynczy klucz jest używany zarówno do szyfrowania, jak i odszyfrowywania ruchu.

Tutaj wpisz opis obrazka

Szyfrowanie Asymetryczne:

Szyfrowanie asymetryczne jest również znane jako kryptografia klucza publicznego. Szyfrowanie asymetryczne różni się od szyfrowania symetrycznego przede wszystkim tym, że używane są dwa klucze: jeden do szyfrowania i jeden do deszyfrowanie. Najczęściej stosowanym algorytmem szyfrowania asymetrycznego jest RSA. W porównaniu z szyfrowaniem symetrycznym, szyfrowanie asymetryczne nakłada duże obciążenie obliczeniowe i zwykle jest znacznie wolniejsze. W związku z tym nie jest zwykle stosowany do ochrony danych ładunku. Zamiast tego, jego główną siłą jest jego zdolność do ustanowienia bezpiecznego kanału za pośrednictwem nonsecure medium (na przykład Internet). Odbywa się to poprzez wymianę kluczy publicznych, które mogą być używane tylko do szyfrowania danych. Komplementarne klucz prywatny, który nigdy nie jest udostępniany, jest używany do odszyfrowywania.

Tutaj wpisz opis obrazka

Hashowanie:

W końcu haszowanie jest formą zabezpieczenia kryptograficznego, która różni się od szyfrowania. Podczas gdy szyfrowanie jest procesem dwuetapowym używanym do najpierw szyfrowania, a następnie odszyfrowywania wiadomości, hashowanie skondensowuje wiadomość do nieodwracalnej wartości o stałej długości lub hash. Dwa najczęściej spotykane algorytmy haszujące występujące w sieci to MD5 i SHA-1.

Tutaj wpisz opis obrazka

Czytaj więcej tutaj: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/

 12
Author: Vahid Farahmandian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-03 08:12:08
  1. Używaj skrótów, gdy musisz przejść tylko w jedną stronę. Na przykład, w przypadku haseł w systemie, używasz hashowania, ponieważ zawsze sprawdzasz, czy wartość wprowadzona przez użytkownika po hashowaniu odpowiada wartości w Twoim repozytorium. Z szyfrowaniem można przejść na dwa sposoby.

  2. Algorytmy haszujące i algorytmy szyfrujące to tylko algorytmy matematyczne. Więc pod tym względem nie są one różne-to wszystko tylko formuły matematyczne. Semantyka mądra jest jednak bardzo duże rozróżnienie między hashowaniem (jednokierunkowym) i szyfrowaniem(dwukierunkowym). Dlaczego hasze są nieodwracalne? Ponieważ są tak zaprojektowane, ponieważ czasami chcesz operacji jednokierunkowej.

 6
Author: hvgotcodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-09 17:37:28

Algorytmy szyfrowania i haszowania działają w podobny sposób. W każdym przypadku istnieje potrzeba stworzenia zamieszania i dyfuzji pomiędzy bitami. Zagłębione, zamieszanie tworzy złożoną relację między kluczem a szyfrem, a dyfuzja rozprzestrzenia informacje o każdym bitu wokół.

Wiele funkcji hashowych wykorzystuje algorytmy szyfrowania (lub pierwowzory algorytmów szyfrowania). Na przykład kandydat SHA-3 Skein używa Threefish jako podstawowa metoda przetwarzania każdego bloku. Różnica polega na tym, że zamiast zachować każdy blok szyfrogramu, są one destrukcyjnie, deterministycznie połączone ze sobą do stałej długości

 5
Author: Justin Morgan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-09 17:43:47

Jeśli chodzi o bezpieczeństwo transmisji danych tj. dwukierunkową komunikację używasz szyfrowania.Wszystkie szyfrowanie wymaga klucza

Jeśli chodzi o autoryzację, używasz hashowania.Nie ma klucza w hashowaniu

Hashowanie pobiera dowolną ilość danych (binarną lub tekstową) i tworzy hash o stałej długości reprezentujący sumę kontrolną dla danych. Na przykład hash może wynosić 16 bajtów. Różne algorytmy mieszania wytwarzają różne skróty o różnych rozmiarach. Oczywiście nie można odtworzyć oryginalnych danych z hash, ale możesz ponownie hashować dane, aby sprawdzić, czy ta sama wartość hash jest generowana. Jednokierunkowe hasła oparte na Uniksie działają w ten sposób. Hasło jest przechowywane jako wartość skrótu, a aby zalogować się do systemu, wpisywane hasło jest hashowane, a wartość skrótu jest porównywana z Hashem prawdziwego hasła. Jeśli pasują, musisz wpisać poprawne hasło

Dlaczego hashowanie jest nieodwracalne:

Hashowanie nie jest odwracalne, ponieważ mapowanie input-to-hash nie 1 do 1. Posiadanie dwóch wejść mapujących tę samą wartość skrótu jest zwykle określane jako "kolizja skrótu". Ze względów bezpieczeństwa jedną z właściwości "dobrej" funkcji skrótu jest to, że kolizje są rzadkie w praktycznym użyciu.

 5
Author: ayush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-09 17:45:16

Masz już kilka dobrych odpowiedzi, ale chyba możesz to zobaczyć tak: Szyfrowanie: Szyfrowanie musi być odszyfrowane, jeśli masz odpowiedni klucz.

Przykład: Jak przy wysyłaniu e-maila. Możesz nie chcieć, aby wszyscy na świecie wiedzieli, co piszesz do osoby otrzymującej e-mail, ale osoba, która otrzyma e-mail, prawdopodobnie chciałaby być w stanie go przeczytać.

HASHES: hasze działają podobnie jak szyfrowanie, ale nie powinno być w stanie go odwrócić w wszystkie.

Przykład: Jak wtedy, gdy wkładasz klucz do zamkniętych drzwi(takie, które zamykają się, gdy je zamykasz). Nie obchodzi cię, jak zamek działa w szczegółach, tak długo, jak odblokowuje się podczas korzystania z klucza. Jeśli pojawią się problemy, prawdopodobnie nie można go naprawić, zamiast tego uzyskać nowy zamek.(podobnie jak zapominanie haseł przy każdym logowaniu, przynajmniej robię to cały czas i jest to wspólny obszar do korzystania z hashowania).

... i chyba można nazwać Tęczowy algorytm ślusarzem w tym case.

Mam nadzieję, że wszystko się wyjaśni=)

 1
Author: fetknoppen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-27 16:11:52

Kryptografia zajmuje się liczbami i łańcuchami. Zasadniczo każda cyfrowa rzecz w całym wszechświecie to liczby. Kiedy mówię liczby, to 0 i 1. Wiesz, co to jest, binary. Obrazy, które widzisz na ekranie, muzyka, którą słuchasz przez słuchawki, wszystko to pliki binarne. Ale nasze uszy i oczy nie zrozumieją binariów prawda? Tylko mózg może to zrozumieć, a nawet jeśli może zrozumieć binaria, nie może cieszyć się binariami. Więc konwertujemy binaria na ludzkie formaty takie jak mp3, jpg itp. Nazwijmy proces kodowaniem . Jest to proces dwukierunkowy i można go łatwo dekodować z powrotem do pierwotnej postaci.

Hashing

Hashowanie {[2] } jest kolejną techniką kryptograficzną, w której dane po konwersji do innej formy nie mogą być odzyskane. W pojęciu laika nie istnieje proces o nazwie de-hashing . Istnieje wiele funkcji skrótu do wykonania zadania, takich jak sha-512, md5 i tak dalej.

Jeśli oryginalna wartość nie może być odzyskana, więc gdzie tego używamy? Hasła! Po skonfigurowaniu hasła dla telefonu komórkowego lub komputera, hash hasła jest tworzony i przechowywany w bezpiecznym miejscu. Przy kolejnej próbie logowania, wprowadzony ciąg znaków jest ponownie haszowany tym samym algorytmem (funkcja haszująca), a wynik jest dopasowany do zapisanej wartości. Jeśli to to samo, zostaniesz zalogowany. W przeciwnym razie zostaniesz wyrzucony.

Napisy: wikimedia Stosując hash do hasła, możemy zapewnić że atakujący nigdy nie dostanie naszego hasła, nawet jeśli wykradnie przechowywany plik hasła. Atakujący będzie miał hash hasła. Może on prawdopodobnie znaleźć listę najczęściej używanych haseł i zastosować sha-512 do każdego z nich i porównać je z wartością w ręku. Nazywa się to atakiem słownikowym . Ale jak długo by to robił? Jeśli Twoje hasło jest wystarczająco losowe, czy uważasz, że ta metoda pękania zadziała? Wszystkie hasła w bazach Facebook, Google A Amazon jest zaszyfrowany, a przynajmniej powinien być zaszyfrowany.

Wtedy jest szyfrowanie

Szyfrowanie leży pomiędzy hashowaniem a kodowaniem. Kodowanie jest procesem dwukierunkowym i nie powinno być używane do zapewnienia bezpieczeństwa. Szyfrowanie jest również procesem dwukierunkowym, ale oryginalne dane mogą być pobierane wtedy i tylko wtedy, gdy klucz szyfrowania jest znany. Jeśli nie wiesz, jak działa szyfrowanie, nie martw się, omówimy tutaj podstawy. To wystarczy, aby zrozumieć podstawy SSL. Istnieją więc dwa rodzaje szyfrowania, a mianowicie Szyfrowanie symetryczne i asymetryczne.

Szyfrowanie Klucza Symetrycznego

Staram się, aby wszystko było tak proste, jak to tylko możliwe. Przyjrzyjmy się więc szyfrowaniu symetrycznemu za pomocą algorytmu przesunięcia. Algorytm ten służy do szyfrowania alfabetów poprzez przesunięcie liter w lewo lub w prawo. Weźmy krypto łańcuchowe i rozważmy liczbę +3. Następnie zaszyfrowanym formatem krypto będzie FUBSWR. Oznacza to, że każda litera jest przesunięty w prawo o 3 miejsca. W tym przypadku słowo CRYPTO nazywa się zwykłym tekstem , wyjściowy FUBSWR nazywa się szyfrem , wartość +3 nazywa się szyfrowaniem Klucz (klucz symetryczny), a cały proces jest szyfrem . Jest to jeden z najstarszych i podstawowych algorytmów szyfrowania klucza symetrycznego, a jego pierwsze użycie odnotowano w czasach Juliusza Cezara. Tak więc został nazwany na jego cześć i jest to słynny szyfr Cezara . Każdy, kto zna klucz szyfrowania i może zastosować odwrotność algorytmu Caesara i pobrać oryginalny tekst zwykły. Stąd nazywa się to szyfrowaniem symetrycznym .

Szyfrowanie Klucza Asymetrycznego

Wiemy, że w szyfrowaniu symetrycznym ten sam klucz jest używany zarówno do szyfrowania, jak i deszyfrowania. Gdy klucz zostanie skradziony, wszystkie dane znikną. To ogromne ryzyko i potrzebujemy bardziej złożonej techniki. W 1976 roku Whitfield Diffie i Martin Hellman po raz pierwszy opublikowali koncepcję asymetrii szyfrowanie i algorytm był znany jako Diffie-Hellman key exchange . Następnie w 1978 r. Ron Rivest, Adi Shamir i Leonard Adleman z MIT opublikowali algorytm RSA . Można je uznać za podstawę kryptografii asymetrycznej.

W porównaniu do szyfrowania symetrycznego, w szyfrowaniu asymetrycznym będą dwa klucze zamiast jednego. Jeden z nich nazywa się kluczem publicznym, a drugi jest kluczem prywatnym . Teoretycznie, podczas inicjacji możemy wygenerować parę kluczy Public-Private do naszej maszyny. Klucz prywatny powinien być przechowywany w bezpiecznym miejscu i nigdy nie powinien być nikomu udostępniany. Klucz publiczny, jak sama nazwa wskazuje, może być udostępniony każdemu, kto chce wysłać do ciebie zaszyfrowany tekst. Teraz ci, którzy mają Twój klucz publiczny, mogą zaszyfrować tajne dane. Jeśli para kluczy została wygenerowana za pomocą algorytmu RSA, to powinni używać tego samego algorytmu podczas szyfrowania danych. Zwykle algorytm będzie określony w klucz publiczny. Zaszyfrowane dane można odszyfrować wyłącznie za pomocą klucza prywatnego, który należy do użytkownika.

Source: SSL / TLS for dummies part 1 : Ciphersuite, Hashing,Encryption | WST ( https://www.wst.spacja / ssl-part1-ciphersuite-hashing-encryption/)

 -2
Author: Anonymous Platypus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 09:31:56

Szyfrowanie celem szyfrowania jest przekształcenie danych w celu zachowania ich w tajemnicy np. (wysyłanie komuś tajnego tekstu, który powinien tylko czytać, wysyłanie haseł przez Internet).

Zamiast skupiać się na użyteczności, celem jest zapewnienie, że wysyłane dane będą wysyłane potajemnie i będą widoczne tylko dla użytkownika, którego wysłałeś.

Szyfruje dane w innym formacie przekształcając je w unikalny wzór, który można zaszyfrować za pomocą klucz tajny i ci użytkownicy, którzy mają klucz tajny, mogą zobaczyć wiadomość, odwracając proces. E. g (AES,BLOWFISH, RSA)

Szyfrowanie może po prostu wyglądać tak FhQp6U4N28GITVGjdt37hZN

Hashowanie w technice możemy powiedzieć, że pobiera arbiter i produkuje ciąg o stałej długości.

Najważniejsze jest to, że nie można przejść z wyjścia do input.It generuje silny wynik, który dana informacja ma nie został zmodyfikowany. Proces polega na pobraniu danych wejściowych i hashowaniu ich, a następnie wysłaniu za pomocą klucza prywatnego nadawcy, gdy odbiorca otrzyma, może je zweryfikować za pomocą klucza publicznego nadawcy.

Jeśli hash jest nieprawidłowy i nie pasuje do hasha, nie możemy zobaczyć żadnej z informacji. E. G (MD5, SHA.....)

 -3
Author: neevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-15 13:37:58