I was having a heck of a time finding help on making asynchronous encryption/decryption using private key/public key systems working, and I had to have it for creating a credit card module that uses recurring billing.
You'd be a fool to use normal, 'synchronous' or two-way encryption for this, so the whole mcrypt library won't help.
But, it turns out OpenSSL is extremely easy to use...yet it is so sparsely documented that it seems it would be incredibly hard.
So I share my day of hacking with you - I hope you find it helpful!
<?php
if (isset($_SERVER['HTTPS']) )
{
echo "SECURE: This page is being accessed through a secure connection.<br><br>";
}
else
{
echo "UNSECURE: This page is being access through an unsecure connection.<br><br>";
}
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $privatekey);
// Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
echo "Private Key:<BR>$privatekey<br><br>Public Key:<BR>$publickey<BR><BR>";
$cleartext = '1234 5678 9012 3456';
echo "Clear text:<br>$cleartext<BR><BR>";
openssl_public_encrypt($cleartext, $crypttext, $publickey);
echo "Crypt text:<br>$crypttext<BR><BR>";
openssl_private_decrypt($crypttext, $decrypted, $privatekey);
echo "Decrypted text:<BR>$decrypted<br><br>";
?>
Many thanks to other contributors in the docs for making this less painful.
Note that you will want to use these sorts of functions to generate a key ONCE - save your privatekey offline for decryption, and put your public key in your scripts/configuration file. If your data is compromised you don't care about the encrypted stuff or the public key, it's only the private key and cleartext that really matter.
Good luck!
PHP.mk документација
OpenSSL
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
book.openssl.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
book.openssl.php
OpenSSL
Референца за `book.openssl.php` со подобрена типографија и навигација.
OpenSSL
Вовед
This extension binds functions of Овој екстензија ги поврзува функциите на » OpenSSL
библиотека за симетрично и асиметрично шифрирање и дешифрирање, PBKDF2, PKCS7, PKCS12, X509 и други крипто операции. Покрај тоа, обезбедува имплементација на TLS стримови.
- Installing/Configuring
- Претходно дефинирани константи
- OpenSSL нуди многу функции што овој модул моментално не ги поддржува. Некои од нив може да бидат додадени во иднина.
- Флагови за проверка на целта
- Флагови за подлога при асиметрично шифрирање
- Типови на клучеви
- PKCS7 Флагови/Константи
- CMS Флагови/Константи
- Алгоритми за потпис
- Шифри
- Константи за верзија
- Константи за Server Name Indication
- Параметри на клуч/сертификат
- Проверка на сертификат
- OpenSSL функции
- openssl_cipher_iv_length Други константи
- openssl_cipher_key_length — Го добива IV должината на шифрата
- openssl_cms_decrypt — Го добива должината на клучот на шифрата
- openssl_cms_encrypt — Дешифрира CMS порака
- openssl_cms_read — Шифрира CMS порака
- openssl_cms_sign — Експортира CMS датотека во низа од PEM сертификати
- openssl_cms_verify — Потврди CMS потпис
- openssl_csr_export — Извези CSR како стринг
- openssl_csr_export_to_file — Извези CSR во датотека
- openssl_csr_get_public_key — Врати ја јавната клучалка на CSR
- openssl_csr_get_subject — Врати го субјектот на CSR
- openssl_csr_new — Генерирај CSR
- openssl_csr_sign — Потпиши CSR со друг сертификат (или самиот себе) и генерирај сертификат
- openssl_decrypt — Дешифрирај податоци
- openssl_dh_compute_key — Пресметај споделена тајна за јавната вредност на далечинска DH јавна клучалка и локална DH клучалка
- openssl_digest — Пресметај дигест
- openssl_encrypt — Шифрирај податоци
- openssl_error_string — Врати порака за грешка на openSSL
- openssl_free_key — Ослободи ресурс на клучалка
- openssl_get_cert_locations — Преземи ги достапните локации на сертификати
- openssl_get_cipher_methods — Добиј достапни методи за шифрирање
- openssl_get_curve_names — Добиј список на достапни имиња на криви за ECC
- openssl_get_md_methods — Добиј достапни методи за дигестирање
- openssl_get_privatekey — Алијас на openssl_pkey_get_private
- openssl_get_publickey — Алијас на openssl_pkey_get_public
- openssl_open — Отвори запечатени податоци
- openssl_pbkdf2 — Генерира PKCS5 v2 PBKDF2 стринг
- openssl_pkcs12_export — Експортира PKCS#12 компатибилна датотека за складирање сертификати во променлива
- openssl_pkcs12_export_to_file — Експортира PKCS#12 компатибилна датотека за складирање сертификати
- openssl_pkcs12_read — Парсира PKCS#12 складиште за сертификати во низа
- openssl_pkcs7_decrypt — Дешифрира S/MIME шифрирана порака
- openssl_pkcs7_encrypt — Шифрира S/MIME порака
- openssl_pkcs7_read — Експортира PKCS7 датотека во низа PEM сертификати
- openssl_pkcs7_sign — Потпишува S/MIME порака
- openssl_pkcs7_verify — Ги верификува потписот на S/MIME потпишана порака
- openssl_pkey_derive — Пресметува споделена тајна за јавна вредност на далечински и локален DH или ECDH клуч
- openssl_pkey_export — Добива експортибилна репрезентација на клуч во стринг
- openssl_pkey_export_to_file — Добива експортибилна репрезентација на клуч во датотека
- openssl_pkey_free — Ослободува приватен клуч
- openssl_pkey_get_details — Враќа низа со деталите за клучот
- openssl_pkey_get_private — Земи приватен клуч
- openssl_pkey_get_public — Извлечи јавен клуч од сертификат и подготви го за употреба
- openssl_pkey_new — Генерира нов приватен клуч
- openssl_private_decrypt — Дешифрира податоци со приватен клуч
- openssl_private_encrypt — Шифрира податоци со приватен клуч
- openssl_public_decrypt — Дешифрира податоци со јавен клуч
- openssl_public_encrypt — Шифрира податоци со јавен клуч
- openssl_random_pseudo_bytes — Шифрира податоци со јавен клуч
- openssl_seal — Генерира псевдо-случајна низа од бајти
- openssl_sign — Запечатува (шифрира) податоци
- openssl_spki_export — Генерира потпис
- openssl_spki_export_challenge — Експортира валиден јавен PEM-форматиран јавен клуч потпишан и предизвик
- openssl_spki_new — Експортира предизвик поврзан со потпишан јавен клуч и предизвик
- openssl_spki_verify — Генерира нов потпишан јавен клуч и предизвик
- openssl_verify — Проверува потпишан јавен клуч и предизвик
- openssl_x509_check_private_key — Проверува потпис
- openssl_x509_checkpurpose — Проверува дали приватниот клуч одговара на сертификат
- openssl_x509_export — Проверува дали сертификатот може да се користи за одредена цел
- openssl_x509_export_to_file — Експортира сертификат како низа
- openssl_x509_fingerprint — Експортира сертификат во датотека
- openssl_x509_free — Пресметува отпечаток, или дигест, на даден X.509 сертификат
- openssl_x509_parse — Ослободува ресурс за сертификат
- openssl_x509_read — Парсира X509 сертификат и ги враќа информациите како низа
- openssl_x509_verify — Парсира X.509 сертификат и враќа објект за него
- OpenSSLCertificate — Класата OpenSSLCertificate
- OpenSSLCertificateSigningRequest — Класата OpenSSLCertificateSigningRequest
- OpenSSLAsymmetricKey — Класата OpenSSLAsymmetricKey
Белешки од корисници 1 белешка
— Ги проверува дигиталните потписи на x509 сертификатот против јавен клуч ¶
пред 16 години