Titkosítás nyilvános és privát kulcskal
Szeretném azonnal felhívni a figyelmet arra, hogy a titkosítás meglehetősen bonyolult tudomány, és természetesen nem tudunk mindent alaposan megfontolni egy leckében. De megfontoljuk az alapot, vagyis a titkosítási mechanizmus végrehajtását az állami és a magánkulcs segítségével.
Tehát a nyílt és magántulajdonú titkosítási rendszereket a 70-es években találták fel. Vagyis olyan rendszerek voltak, amelyek biztosítják a titkosított üzenetek átvitelét, amelynek visszafejtéséhez a titkosítási kulcstól eltérő kulcshoz szükséges. Ez volt a fő különbség az új rendszerek és a régiek között, amelyekben csak egy kulcst használtak - az üzenet titkosítására és visszafejtésére.
A nyilvános kulcsú titkosítási rendszerekben egy szkriptet használnak, amely nyilvános kulcs használatával titkosítja az adatokat. A nyilvános kulcs egy titkosítás, amely közvetlenül az üzenet titkosítására szolgáló utasításként működik. A nyilvános kulcsot a titkosítási parancsfájl hozza létre, és minden felhasználó számára egyedi - egyedülálló.
Az YII2 keretrendszer. Gyors fejlesztés a modern PHP keretrendszerrel
Ismerje meg a modern webfejlesztés bonyolultságait az YII2 keretrendszer segítségével
Az üzenet titkosítása után csak a privát kulcs segítségével visszafejthető.
Vegye figyelembe a fenti ábrát (fent) - ez a nyílt és magántulajdonú kulcs titkosítási rendszere.
Így például titkosított üzenetet kell küldenie egy adott felhasználónak. Először is meg kell szerezned a nyilvános kulcsot ebből a felhasználóból. Miután megkaptad ezt a kulcsot, akkor a titkosítási szkriptet használod - titkosítod az üzenetet, és elküldöd a felhasználót. Az üzenetek dekódolásához a felhasználó saját kulcsát használja. Ebben az esetben a nyilvános kulcs nem használható az üzenet visszafejtéséhez. Ez azt jelenti, hogy csak az üzenet címzettje tudja elolvasni az üzenetet magánkulcsával.
Így a titkosító szkripttel kombinált magánkulcsot a felhasználó nyilvános kulcsával titkosított üzenet dekódolására használják. A titkos kulcs megismerése nélkül lehetetlen titkosítani a titkosított fájlt.
Mi fog működni?
A titkosító mechanizmus végrehajtásához a mai leckében a PHP nyelv kiterjesztését fogjuk használni - az OpenSSL-t.
Az OpenSSL általában adatvédelmi és tanúsítási rendszer. Az SSL biztonságos aljzatrétegként lett lefordítva. Az OpenSSL-t szinte az összes hálózati szerver használja az átvitt adatok védelmére, és ez meglehetősen összetett és kiterjedt rendszer. A mai leckében csak azokat a pontokat vesszük figyelembe, amelyek befolyásolják az adatok titkosítását.
Ezután ne felejtse el újraindítani a webszervert. Ha a denwer csomagot használja, az alapváltozatban, akkor valószínűleg nem rendelkezik ezzel a kiterjesztéssel. Töltse le és telepítse a bőncsomagot a denver verziójához (ez a csomag letölthető a hivatalos webhelyről).
Kulcsgenerálás
Szóval, először, létre kell hoznia a kulcsokat. Ehhez létre fog hozni az Enc.class.php fájlt, és hozzon létre egy osztályt, amely a szkript logikus magja lesz:
Ebben az osztályban létrehozzuk a get_keys () statikus módszert, amelyet a kulcsok generálásához és szövegfájlokba való elmentéshez használunk fel (feltételezzük, hogy ezt a módszert csak egyszer hívják fel - szövegfájlok létrehozására és írására). Az első dolog, amit létrehozunk, egy sor configs, vagyis beállítjuk az opciókat, amikor létrehozunk egy privát kulcsot:
Adja meg az OPENSSL_KEYTYPE_RSA (titkos kulcs titkosításához nyitott és privát kulcs) kulcs típusát és a jövőbeli kulcs bitjeinek méretét (512 bit). Ezután hozzon létre egy privát kulcsot és tegye vissza a fogantyúját:
A kulcs értékének lekérése a leíróból:
A függvény openssl_pkey_export () - a privát kulcsot karakterláncként adja vissza, és ezt a sort az $ privKey változóban tárolja, amelyet a függvény második argumentuma átad. Az első paraméter a kulcsleíró. Most hozd létre az index.php fájlt, és megjelenítsd az $ privKey változót (a get_keys () metódusban, átmenetileg visszaadom a privát kulcs értékét):
Íme, amit látunk a képernyőn:
Az YII2 keretrendszer. Gyors fejlesztés a modern PHP keretrendszerrel
Ismerje meg a modern webfejlesztés bonyolultságait az YII2 keretrendszer segítségével
Ezután mentse el a fogadott kulcsot egy szövegfájlba.
Most, ha újra frissítjük a szkriptet, meg fogjuk látni, hogy létrejött egy szövegfájl, amelyben a privát kulcs mentésre került. Ezután létre kell hoznia egy nyilvános kulcsot. Ehhez hozzon létre egy kérelmet egy tanúsítványra - CSR (tanúsítvány aláírási kérelem). Melyik titkosított szöveg a cégről, a domain névről stb. Ez a kérés kötelező hitelesítésszolgáltató által kiállított SSL tanúsítvány megvásárlásához. CSR-kérelem létrehozásához létre kell hoznia egy tömböt a következő adatokkal:
"CountryName" => "UA" - kétjegyű országkód;
"StateOrProvinceName" => "Kijevskaya oblast" - régió vagy régió;
"LocalityName" => "Kijev" egy város;
"OrganizationName" => "Szervezet" - a cég neve;
"OrganizationalUnitName" => "Soft" - az osztály neve;
"CommonName" => "localhost" - a tartománynév;
Ezután hozzon létre egy CSR lekérdezést:
Vegye figyelembe, hogy át kell adni az openssl_csr_new () függvényeket, a korábban létrehozott tömböt és a privát kulcsot. Ezután létrehozunk egy tanúsítványt:
A függvény openssl_csr_sign - visszaadja a létrehozott tanúsítvány leíróját. Azt kell, hogy adja át a következő paraméterekkel: $ csr- kérelem csr, NULL - azt jelenti, hogy az így kapott tanúsítványt lesz saját előállítású tanúsítvány $ privkey - a privát kulcs, 10 - idő igazolás jelentősége ezekben a napokban. A függvény openssl_x509_export () - kivonja a tanúsítványt a $ cert descriptorból és tárolja a $ str_cert változóban. Ezután hozzon létre egy nyilvános kulcsot:
openssl_pkey_get_public () függvény egy fogantyút a nyilvános kulcsot (a bizonyítvány alapján korábban kapott), és openssl_pkey_get_details () függvény egy tömb, amiben a kulcs sejt tartalmaz egy nyilvános kulcsot. Lássuk, hogyan néz ki:
Ezután írja be a nyilvános kulcsot egy fájlnak, és vigye vissza a tömböt a kulcsokkal:
Az adatok titkosítása
A titkosításhoz hozzáadjuk a my_enc () függvényt:
Amint látja, itt olvassuk el a nyilvános kulcsot egy szövegfájlból, és hívjuk az openssl_public_encrypt () függvényt, amely az adatokat nyilvános kulcs segítségével titkosítja. A hozzárendelendő paraméterek: $ str - string a titkosításhoz; $ eredmény - az a változó, amelybe az eredményeket tárolják, és a $ pub_key - a nyilvános kulcs.
Az adatok visszafejtése
A szokásos módon új módszert hozunk létre:
Először is kapjuk meg a privát kulcsot egy szövegfájllal és felhívjuk az openssl_private_decrypt () függvényt, amely az adatokat privát kulcs segítségével dekódolja. A hozzá tartozó paraméterek $ str - a visszafejtendő karakterlánc, $ a változó, amelyre az eredmény mentésre kerül, $ pr_key - privát kulcs.
A szkript tesztelése
Most csatolja a kódot index.php, nevezetesen egy sztring titkosítás és hívja módszerek következetesen my_enc (), titkosítás és my_dec () dekódolás (a teljes kódot a index.php):
Most nézzük meg, mit kaptunk:
Amint látod, hogy mindent sikeresen dolgozott. Ez lezárja ezt a leckét. Minden a legjobb neked és a jó kódolás.
Az YII2 keretrendszer. Gyors fejlesztés a modern PHP keretrendszerrel
Ismerje meg a modern webfejlesztés bonyolultságait az YII2 keretrendszer segítségével
A legfrissebb hírek az informatikai és webfejlesztésről a Telegram csatornán