{"id":274944,"date":"2016-02-25T15:21:03","date_gmt":"2016-02-25T12:21:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=274944"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=274944","title":{"rendered":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 OpenSSL \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043d\u0430 C++"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3ba\/831\/494\/3ba831494b1840d3803be1b5fa0b1b2c.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0412 \u0441\u0432\u043e\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 OpenSSL. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0441\u0430\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435\u0433\u043e. \u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043f\u043e\u0434 Windows \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Visual Studio 2013.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0428\u0430\u0433 1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/h4>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 OpenSSL \u0441 Visual Studio \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\u0410\u0440\u0445\u0438\u0432 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.1 <a href=\"http:\/\/www.openssl.org\/source\/old\/1.0.1\/openssl-1.0.1a.tar.gz\">(\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u043e\u0444. \u0441\u0430\u0439\u0442\u0430)<\/a> <\/li>\n<li>Perl \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<a href=\"http:\/\/strawberryperl.com\/\"> (\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u043e\u0444. \u0441\u0430\u0439\u0442\u0430)<\/a><\/li>\n<li>\u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Visual Studio, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u00ab\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u00bb<\/li>\n<\/ul>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Perl, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432 <b>openssl-1.0.1a.tar.gz<\/b> \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 <b>C:\\openssl<\/b>. \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 Perl (command line) \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"perl\">cd c:\\openssl  perl Configure VC-WIN32 --prefix=c:\\Temp\\openssl ms\\do_ms <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c <b>Configured for VC-WIN32<\/b>. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0443\u0441\u043a\u0435 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 Visual Studio \u00ab\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u00bb, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0432\u0432\u043e\u0434\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b: <\/p>\n<pre><code class=\"cpp\">cd c:\\openssl nmake -f ms\\ntdll.mak nmake -f ms\\ntdll.mak install <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430. \u0412 \u043f\u0430\u043f\u043a\u0435 <b>C:\\Temp\\openssl\\bin<\/b> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0432\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <b>ssleay32.dll<\/b> \u0438 <b>libeay32.dll<\/b>, \u0430 \u0432 \u043f\u0430\u043f\u043a\u0435 <b>C:\\Temp\\openssl\\lib<\/b> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c <b>ssleay32.lib<\/b> \u0438 <b>libeay32.lib<\/b>.<\/p>\n<h4>\u0428\u0430\u0433 2. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0441\u0440\u0435\u0434\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h4>\n<p>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0445 \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0443, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 Visual Studio. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <b>..\\Visual Studio\\VC\\include<\/b> \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u0443\u0434\u0430 \u043f\u0430\u043f\u043a\u0443 <b>C:\\Temp\\openssl\\include\\openssl<\/b>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 rsa):<\/p>\n<pre><code class=\"cpp\">#include &lt;openssl\/rsa.h&gt; \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c RSA #include &lt;openssl\/pem.h&gt; \/\/ \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043a\u043b\u044e\u0447\u0435\u0439 <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <b>.lib<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u043c <b>\u041e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/b> \u0432 Visual Studio, \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u0439\u0434\u0435\u043c \u043f\u0430\u043f\u043a\u0443 <b>\u0424\u0430\u0439\u043b\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/b>, \u0449\u0435\u043b\u043a\u043d\u0435\u043c \u043f\u043e \u043d\u0435\u0439 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 -&gt; <b>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c<\/b> -&gt; <b>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <\/b>\u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0438 .lib \u0444\u0430\u0439\u043b\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432 <b>C:\\Temp\\openssl\\lib<\/b>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a60\/e82\/052\/a60e8205207d47959b0215b06212cd46.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043e\u043a\u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e &quot;C:\\Windows\\SysWOW64\\srvcli.dll&quot;. \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c PDB-\u0444\u0430\u0439\u043b. <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043b\u0435\u0447\u0438\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Microsoft. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 <b>\u0421\u0435\u0440\u0432\u0438\u0441<\/b> -&gt; <b>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/b>, \u0441\u043b\u0435\u0432\u0430 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <b>\u041e\u0442\u043b\u0430\u0434\u043a\u0430<\/b> -&gt; <b>\u0421\u0438\u043c\u0432\u043e\u043b\u044b<\/b>, \u0441\u0442\u0430\u0432\u0438\u043c \u0433\u0430\u043b\u043a\u0443 \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432 &quot;<b>\u0421\u0435\u0440\u0432\u0435\u0440\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 Microsoft<\/b>&quot; \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u041e\u041a. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fb4\/fcc\/190\/fb4fcc19011a49c0af88c959984614a3.jpg\" alt=\"image\"\/><br \/>  \u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 <b>Release<\/b>, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<h4>\u0428\u0430\u0433 3. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430<\/h4>\n<p>  <\/p>\n<pre><code class=\"cpp\">int RSA_size(const RSA *rsa) \u0412\u0435\u0440\u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 RSA \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0431\u0430\u0439\u0442\u0430\u0445  RSA * RSA_generate_key(int bits, unsigned long e, void(*callback)(int, int, void*), void *cb_arg) \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0440\u0443 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 RSA \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b RSA \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u0430\u0439\u043b int PEM_write_RSAPublicKey(FILE *fp, const RSA *x) \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b RSA \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u0430\u0439\u043b RSA * PEM_read_RSAPublicKey(FILE *fp, RSA **x, pem_password_cb *cb, void *u) \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 RSA \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 RSA * PEM_read_RSAPrivateKey(FILE *fp, RSA **x, pem_password_cb *cb, void *u) \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 RSA \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 int RSA_public_encrypt(int flen, const unsigned char *from, const unsigned char *to, RSA *rsa, int padding) \u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 &quot;from&quot; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 &quot;to&quot; int RSA_private_decrypt(int flen, const unsigned char *from, const unsigned char *to, RSA *rsa, int padding) \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 &quot;from&quot; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 &quot;to&quot;. \u0412\u0435\u0440\u043d\u0435\u0442 &quot;-1&quot; \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c. <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/yadi.sk\/d\/uVomsC5DpL8x3\">\u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a\u0430<\/a>.<\/p>\n<p>  \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438:<\/p>\n<ul>\n<li><a href=\"http:\/\/incpp.blogspot.ru\/2010\/11\/openssl.html\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a><\/li>\n<li><a href=\"https:\/\/dev.osll.ru\/attachments\/download\/303\/samag5_42_-70-75.pdf\">\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a><\/li>\n<li><a href=\"http:\/\/www.unix.com\/apropos-man\/all\/0\/man\/\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#define _CRT_SECURE_NO_WARNINGS  #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;io.h&gt; #include &lt;fcntl.h&gt; #include &lt;stdlib.h&gt; #include &lt;openssl\/rsa.h&gt; #include &lt;openssl\/pem.h&gt;  using namespace std; void GenKeys(char secret[]); void Enc(); void Dec(char secret[]); void GenKeysMenu(); void EncryptMenu(); void DecryptMenu();  void main(){ \tsetlocale(LC_ALL, &quot;Russian&quot;); \tchar key; StartMenu: \tsystem(&quot;cls&quot;); \tcout &lt;&lt; &quot;-------------- \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 RSA --------------&quot; &lt;&lt; endl &lt;&lt; endl; \tcout &lt;&lt; &quot;  1. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439&quot; &lt;&lt; endl; \tcout &lt;&lt; &quot;  2. \u0417\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430&quot; &lt;&lt; endl; \tcout &lt;&lt; &quot;  3. \u0414\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430&quot; &lt;&lt; endl &lt;&lt; endl; \tcout &lt;&lt; &quot;\u0412\u0430\u0448 \u0432\u044b\u0431\u043e\u0440: &quot;; \tcin &gt;&gt; key; \tswitch (key){ \tcase '1': GenKeysMenu(); goto StartMenu; \tcase '2': EncryptMenu(); goto StartMenu; \tcase '3': DecryptMenu(); goto StartMenu; \tdefault: goto StartMenu; \t} }  void GenKeys(char secret[]){ \t\/* \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 *\/ \tRSA * rsa = NULL; \tunsigned long bits = 1024; \/* \u0434\u043b\u0438\u043d\u0430 \u043a\u043b\u044e\u0447\u0430 \u0432 \u0431\u0438\u0442\u0430\u0445 *\/ \tFILE * privKey_file = NULL, *pubKey_file = NULL; \t\/* \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f *\/ \tconst EVP_CIPHER *cipher = NULL; \t\/*\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u043a\u043b\u044e\u0447\u0435\u0439*\/ \tprivKey_file = fopen(&quot;\\private.key&quot;, &quot;wb&quot;); \tpubKey_file = fopen(&quot;\\public.key&quot;, &quot;wb&quot;); \t\/* \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u044e\u0447\u0438 *\/ \trsa = RSA_generate_key(bits, RSA_F4, NULL, NULL); \t\/* \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f *\/ \tcipher = EVP_get_cipherbyname(&quot;bf-ofb&quot;); \t\/* \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b rsa \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0444\u0430\u0439\u043b\u0430\u0445. \t* \u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u0443\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u044b \t*\/ \tPEM_write_RSAPrivateKey(privKey_file, rsa, cipher, NULL, 0, NULL, secret); \tPEM_write_RSAPublicKey(pubKey_file, rsa); \t\/* \u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 rsa *\/ \tRSA_free(rsa); \tfclose(privKey_file); \tfclose(pubKey_file); \tcout &lt;&lt; &quot;\u041a\u043b\u044e\u0447\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c&quot; &lt;&lt; endl; }  void Encrypt(){ \t\/* \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 *\/ \tRSA * pubKey = NULL; \tFILE * pubKey_file = NULL; \tunsigned char *ctext, *ptext; \tint inlen, outlen; \t\/* \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 *\/ \tpubKey_file = fopen(&quot;\\public.key&quot;, &quot;rb&quot;); \tpubKey = PEM_read_RSAPublicKey(pubKey_file, NULL, NULL, NULL); \tfclose(pubKey_file);  \t\/* \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u043a\u043b\u044e\u0447\u0430 *\/ \tint key_size = RSA_size(pubKey); \tctext = (unsigned char *)malloc(key_size); \tptext = (unsigned char *)malloc(key_size); \tOpenSSL_add_all_algorithms();  \tint out = _open(&quot;rsa.file&quot;, O_CREAT | O_TRUNC | O_RDWR, 0600); \tint in = _open(&quot;in.txt&quot;, O_RDWR); \t\/* \u0428\u0438\u0444\u0440\u0443\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 *\/ \twhile (1) { \t\tinlen = _read(in, ptext, key_size - 11); \t\tif (inlen &lt;= 0) break; \t\toutlen = RSA_public_encrypt(inlen, ptext, ctext, pubKey, RSA_PKCS1_PADDING); \t\tif (outlen != RSA_size(pubKey)) exit(-1); \t\t_write(out, ctext, outlen); \t} \tcout &lt;&lt; &quot;\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 in.txt \u0431\u044b\u043b\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043e \u0432 \u0444\u0430\u0439\u043b rsa.file&quot; &lt;&lt; endl; }  void Decrypt(char secret[]){ \tRSA * privKey = NULL; \tFILE * privKey_file; \tunsigned char *ptext, *ctext; \tint inlen, outlen;  \t\/* \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 *\/ \tOpenSSL_add_all_algorithms(); \tprivKey_file = fopen(&quot;private.key&quot;, &quot;rb&quot;); \tprivKey = PEM_read_RSAPrivateKey(privKey_file, NULL, NULL, secret);  \t\/* \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430 *\/ \tint key_size = RSA_size(privKey); \tptext = (unsigned char *)malloc(key_size); \tctext = (unsigned char *)malloc(key_size);  \tint out = _open(&quot;out.txt&quot;, O_CREAT | O_TRUNC | O_RDWR, 0600); \tint in = _open(&quot;rsa.file&quot;, O_RDWR);  \t\/* \u0414\u0435\u0448\u0438\u0444\u0440\u0443\u0435\u043c \u0444\u0430\u0439\u043b *\/ \twhile (1) { \t\tinlen = _read(in, ctext, key_size); \t\tif (inlen &lt;= 0) break; \t\toutlen = RSA_private_decrypt(inlen, ctext, ptext, privKey, RSA_PKCS1_PADDING); \t\tif (outlen &lt; 0) exit(0); \t\t_write(out, ptext, outlen); \t} \tcout &lt;&lt; &quot;\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 rsa.file \u0431\u044b\u043b\u043e \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043e \u0432 \u0444\u0430\u0439\u043b out.txt&quot; &lt;&lt; endl;  } void GenKeysMenu(){ \tchar secret[] = &quot;&quot;; \tsystem(&quot;cls&quot;); \tcout &lt;&lt; &quot;-------------- \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 RSA --------------&quot; &lt;&lt; endl &lt;&lt; endl; \tcout &lt;&lt; &quot;\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0444\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430: &quot;; \tcin &gt;&gt; secret; \tGenKeys(secret); \tcout &lt;&lt; &quot;\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432 \u043c\u0435\u043d\u044e...&quot;; \t_getch(); } void EncryptMenu(){ \tsystem(&quot;cls&quot;); \tcout &lt;&lt; &quot;-------------- \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 RSA --------------&quot; &lt;&lt; endl &lt;&lt; endl; \tEncrypt(); \tcout &lt;&lt; &quot;\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432 \u043c\u0435\u043d\u044e...&quot;; \t_getch(); } void DecryptMenu(){ \tchar secret[] = &quot;&quot;; \tsystem(&quot;cls&quot;); \tcout &lt;&lt; &quot;-------------- \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 RSA --------------&quot; &lt;&lt; endl &lt;&lt; endl; \tcout &lt;&lt; &quot;\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0444\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430: &quot;; \tcin &gt;&gt; secret; \tDecrypt(secret); \tcout &lt;&lt; &quot;\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432 \u043c\u0435\u043d\u044e...&quot;; \t_getch(); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/277935\/\"> https:\/\/habrahabr.ru\/post\/277935\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3ba\/831\/494\/3ba831494b1840d3803be1b5fa0b1b2c.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0412 \u0441\u0432\u043e\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 OpenSSL. \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0441\u0430\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u0437\u0432\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435\u0433\u043e. \u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043f\u043e\u0434 Windows \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Visual Studio 2013.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-274944","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=274944"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274944\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=274944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=274944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=274944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}