<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>KARTz.RU &#187; шифрование</title>
	<atom:link href="http://kartz.ru/tag/%d1%88%d0%b8%d1%84%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed/" rel="self" type="application/rss+xml" />
	<link>http://kartz.ru</link>
	<description>кушаешь морковь - встанет вновь и вновь</description>
	<lastBuildDate>Mon, 29 Aug 2016 08:06:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Несиметричное шифрование в PHP</title>
		<link>http://kartz.ru/2012/11/13/php-strong-encrypt/</link>
		<comments>http://kartz.ru/2012/11/13/php-strong-encrypt/#comments</comments>
		<pubDate>Tue, 13 Nov 2012 00:19:25 +0000</pubDate>
		<dc:creator>vasiliy</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[программы]]></category>
		<category><![CDATA[шифрование]]></category>

		<guid isPermaLink="false">http://kartz.ru/?p=2174</guid>
		<description><![CDATA[Учитывая отсутствие внятной документации и кучу примеров с генерированием непонятных сертификатов, пишу эту заметку с рабочим примером в первую очередь сам для себя.
Шаг первый. Генерируем ключи.


$privateKey = openssl_pkey_new(array(
	'private_key_bits' => 1024,
	'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($privateKey, $privstr);
$keyDetails = openssl_pkey_get_details($privateKey);
$pubstr=$keyDetails['key'];

Теперь имеем переменные $pubstr и $privstr с публичным и секретным ключами соответственно. Значения этих переменных надо как-то сохранить, исключив несанкционированное чтение [...]]]></description>
			<content:encoded><![CDATA[<p>Учитывая отсутствие внятной документации и кучу примеров с генерированием непонятных сертификатов, пишу эту заметку с рабочим примером в первую очередь сам для себя.</p>
<p>Шаг первый. Генерируем ключи.<br />
<span id="more-2174"></span></p>
<p><code><br />
$privateKey = openssl_pkey_new(array(<br />
	'private_key_bits' => 1024,<br />
	'private_key_type' => OPENSSL_KEYTYPE_RSA,<br />
));<br />
openssl_pkey_export($privateKey, $privstr);</p>
<p>$keyDetails = openssl_pkey_get_details($privateKey);<br />
$pubstr=$keyDetails['key'];<br />
</code></p>
<p>Теперь имеем переменные $pubstr и $privstr с публичным и секретным ключами соответственно. Значения этих переменных надо как-то сохранить, исключив несанкционированное чтение секретного ключа. Больше этот код запускать не нужно: ключи уже сгенерированы. Теперь используем готовые ключи в примерно таком виде:</p>
<p><code><br />
$privstr='-----BEGIN RSA PRIVATE KEY-----<br />
тру-ля-ля=<br />
-----END RSA PRIVATE KEY-----<br />
';</p>
<p>$pubstr='-----BEGIN PUBLIC KEY-----<br />
парам-пам-рам<br />
-----END PUBLIC KEY-----<br />
';<br />
</code></p>
<p>Шаг второй шифруемся и дешифруемся:</p>
<p><code><br />
openssl_public_encrypt($sensitiveData, $encryptedData, $pubstr);<br />
openssl_private_decrypt($encryptedData, $decrypted, $privstr);<br />
</code></p>
<p>Как мы видим, для шифрования используется публичный ключ, а для дешифровки &#8211; секретный.</p>
<p>Шаг три. Подписываем и проверяем подпись. Тут всё чуточку сложнее &#8211; надо подготовить ключи.</p>
<p><code><br />
$pkeyid = openssl_get_privatekey($privstr);<br />
openssl_sign($data, $signature, $pkeyid);</p>
<p>$pubkeyid = openssl_get_publickey($pubstr);<br />
$ok = openssl_verify($data, $signature, $pubkeyid);<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://kartz.ru/2012/11/13/php-strong-encrypt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
