{"id":306,"date":"2024-12-26T19:43:01","date_gmt":"2024-12-26T19:43:01","guid":{"rendered":"https:\/\/www.qrngua.website\/?page_id=306"},"modified":"2024-12-26T19:46:24","modified_gmt":"2024-12-26T19:46:24","slug":"rsa-key-generator","status":"publish","type":"page","link":"https:\/\/www.qrngua.website\/?page_id=306","title":{"rendered":"RSA Key Generator"},"content":{"rendered":"\n<div class=\"wp-block-media-text is-stacked-on-mobile\" style=\"grid-template-columns:20% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/www.qrngua.website\/wp-content\/uploads\/2024\/12\/rsaIu.jpg\" alt=\"RSA\" class=\"wp-image-86 size-full\" srcset=\"https:\/\/www.qrngua.website\/wp-content\/uploads\/2024\/12\/rsaIu.jpg 1000w, https:\/\/www.qrngua.website\/wp-content\/uploads\/2024\/12\/rsaIu-150x150.jpg 150w, https:\/\/www.qrngua.website\/wp-content\/uploads\/2024\/12\/rsaIu-300x300.jpg 300w, https:\/\/www.qrngua.website\/wp-content\/uploads\/2024\/12\/rsaIu-768x768.jpg 768w, https:\/\/www.qrngua.website\/wp-content\/uploads\/2024\/12\/rsaIu-48x48.jpg 48w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 RSA-\u043a\u043b\u044e\u0447\u0435\u0439<\/p>\n<\/div><\/div>\n\n\n\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 RSA-\u043a\u043b\u044e\u0447\u0435\u0439<\/title>\n    <!-- \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c Forge.js -->\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/node-forge@0.10.0\/dist\/forge.min.js\"><\/script>\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            margin: 20px;\n            text-align: center;\n        }\n        select, button {\n            padding: 10px;\n            font-size: 16px;\n            margin: 10px;\n        }\n        textarea {\n            width: 90%;\n            height: 200px;\n            margin-top: 20px;\n            font-family: monospace;\n            font-size: 14px;\n        }\n    <\/style>\n<\/head>\n<body>\n    <h1>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 RSA-\u043a\u043b\u044e\u0447\u0435\u0439<\/h1>\n    <p>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430:<\/p>\n    <select id=\"keySize\">\n        <option value=\"512\">512 \u0431\u0438\u0442<\/option>\n        <option value=\"1024\" selected>1024 \u0431\u0438\u0442<\/option>\n        <option value=\"2048\">2048 \u0431\u0438\u0442<\/option>\n        <option value=\"4096\">4096 \u0431\u0438\u0442<\/option>\n    <\/select>\n    <p>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438:<\/p>\n    <select id=\"keyCount\">\n        <option value=\"1\" selected>1 \u043a\u043b\u044e\u0447<\/option>\n        <option value=\"2\">2 \u043a\u043b\u044e\u0447\u0430<\/option>\n        <option value=\"3\">3 \u043a\u043b\u044e\u0447\u0430<\/option>\n    <\/select>\n    <button id=\"generateButton\">\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438<\/button>\n\n    <h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/h2>\n    <textarea id=\"result\" readonly>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 &#8220;\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438&#8221;, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c.<\/textarea>\n\n    <script>\n        \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430\n        function downloadFile(filename, content) {\n            const blob = new Blob([content], { type: 'text\/plain' });\n            const link = document.createElement('a');\n            link.href = URL.createObjectURL(blob);\n            link.download = filename;\n            link.click();\n        }\n\n        \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u043d\u043e\u043f\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438\n        document.getElementById('generateButton').addEventListener('click', async () => {\n            const keySize = parseInt(document.getElementById('keySize').value);\n            const keyCount = parseInt(document.getElementById('keyCount').value);\n            const resultArea = document.getElementById('result');\n            resultArea.value = \"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439... \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.\";\n\n            try {\n                for (let i = 0; i < keyCount; i++) {\n                    \/\/ \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f RSA-\u043a\u043b\u044e\u0447\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Forge.js\n                    const keys = await new Promise((resolve, reject) => {\n                        forge.pki.rsa.generateKeyPair({ bits: keySize, workers: -1 }, (err, keypair) => {\n                            if (err) reject(err);\n                            else resolve(keypair);\n                        });\n                    });\n\n                    \/\/ \u041f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447\u0438 \u0432 PEM \u0444\u043e\u0440\u043c\u0430\u0442\u0435\n                    const privateKeyPem = forge.pki.privateKeyToPem(keys.privateKey);\n                    const publicKeyPem = forge.pki.publicKeyToPem(keys.publicKey);\n\n                    \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\n                    downloadFile(`public_key_${i + 1}.pem`, publicKeyPem);\n                    downloadFile(`private_key_${i + 1}.pem`, privateKeyPem);\n\n                    \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043b\u044e\u0447\u0430\u0445 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435\n                    resultArea.value += `\u041a\u043b\u044e\u0447 ${i + 1} \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d:\\n`;\n                    resultArea.value += `\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 (PEM) - public_key_${i + 1}.pem\\n`;\n                    resultArea.value += `\u041f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 (PEM) - private_key_${i + 1}.pem\\n\\n`;\n                }\n            } catch (error) {\n                resultArea.value = `\u041e\u0448\u0438\u0431\u043a\u0430: ${error.message}`;\n            }\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 RSA-\u043a\u043b\u044e\u0447\u0435\u0439 \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 RSA-\u043a\u043b\u044e\u0447\u0435\u0439 \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 RSA-\u043a\u043b\u044e\u0447\u0435\u0439 \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0430: 512 \u0431\u0438\u04421024 \u0431\u0438\u04422048 \u0431\u0438\u04424096 \u0431\u0438\u0442 \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438: 1 \u043a\u043b\u044e\u04472 \u043a\u043b\u044e\u0447\u04303 \u043a\u043b\u044e\u0447\u0430 \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u041d\u0430\u0436\u043c\u0438\u0442\u0435 &#8220;\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438&#8221;, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-306","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.qrngua.website\/index.php?rest_route=\/wp\/v2\/pages\/306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.qrngua.website\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.qrngua.website\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.qrngua.website\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.qrngua.website\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=306"}],"version-history":[{"count":2,"href":"https:\/\/www.qrngua.website\/index.php?rest_route=\/wp\/v2\/pages\/306\/revisions"}],"predecessor-version":[{"id":310,"href":"https:\/\/www.qrngua.website\/index.php?rest_route=\/wp\/v2\/pages\/306\/revisions\/310"}],"wp:attachment":[{"href":"https:\/\/www.qrngua.website\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}