{"id":213,"date":"2026-04-04T17:54:36","date_gmt":"2026-04-04T14:54:36","guid":{"rendered":"https:\/\/atakan.online\/?page_id=213"},"modified":"2026-04-04T17:54:36","modified_gmt":"2026-04-04T14:54:36","slug":"213-2","status":"publish","type":"page","link":"https:\/\/atakan.online\/?page_id=213","title":{"rendered":""},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Sistem Arac\u0131 &#8211; Kriptografi<\/title>\n    <style>\n        \/* RETRO \u0130\u015eLET\u0130M S\u0130STEM\u0130 TEMASI *\/\n        body {\n            font-family: 'MS Sans Serif', 'Tahoma', sans-serif;\n            background-color: #008080; \/* Klasik Win95 arka plan rengi *\/\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            min-height: 100vh;\n            margin: 0;\n            color: #000;\n            user-select: none;\n        }\n\n        \/* Ana Pencere *\/\n        .window {\n            background-color: #c0c0c0;\n            border: 2px solid;\n            border-top-color: #dfdfdf;\n            border-left-color: #dfdfdf;\n            border-right-color: #000;\n            border-bottom-color: #000;\n            box-shadow: 2px 2px 0px rgba(0,0,0,0.5);\n            width: 450px;\n            padding: 2px;\n        }\n\n        \/* Ba\u015fl\u0131k \u00c7ubu\u011fu *\/\n        .title-bar {\n            background: linear-gradient(90deg, #000080, #1084d0);\n            color: #fff;\n            padding: 3px 5px;\n            font-weight: bold;\n            font-size: 14px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 5px;\n        }\n\n        .title-bar-controls button {\n            background-color: #c0c0c0;\n            border: 2px solid;\n            border-top-color: #dfdfdf;\n            border-left-color: #dfdfdf;\n            border-right-color: #000;\n            border-bottom-color: #000;\n            font-weight: bold;\n            font-size: 12px;\n            width: 16px;\n            height: 16px;\n            padding: 0;\n            cursor: pointer;\n            line-height: 10px;\n        }\n\n        .title-bar-controls button:active {\n            border-top-color: #000;\n            border-left-color: #000;\n            border-right-color: #dfdfdf;\n            border-bottom-color: #dfdfdf;\n        }\n\n        \/* \u0130\u00e7erik Alan\u0131 *\/\n        .window-body {\n            padding: 10px;\n        }\n\n        \/* Grupland\u0131rma Kutular\u0131 (Fieldset) *\/\n        fieldset {\n            border: 2px groove #dfdfdf;\n            margin-bottom: 15px;\n            padding: 15px 10px;\n        }\n        \n        legend {\n            font-size: 13px;\n            color: #000;\n            background: #c0c0c0;\n            padding: 0 5px;\n        }\n\n        \/* S\u00fcr\u00fckle B\u0131rak Alan\u0131 *\/\n        .drop-zone {\n            border: 2px dashed #808080;\n            background-color: #fff;\n            text-align: center;\n            padding: 20px 10px;\n            font-size: 12px;\n            color: #808080;\n            cursor: pointer;\n            margin-bottom: 10px;\n            transition: background-color 0.2s;\n        }\n\n        .drop-zone.dragover {\n            background-color: #000080;\n            color: #fff;\n            border-style: solid;\n        }\n\n        .drop-zone input[type=\"file\"] {\n            display: none;\n        }\n\n        \/* Butonlar *\/\n        .retro-btn {\n            background-color: #c0c0c0;\n            border: 2px solid;\n            border-top-color: #dfdfdf;\n            border-left-color: #dfdfdf;\n            border-right-color: #000;\n            border-bottom-color: #000;\n            padding: 5px 15px;\n            font-family: inherit;\n            font-size: 13px;\n            cursor: pointer;\n            width: 100%;\n            display: block;\n        }\n\n        .retro-btn:active {\n            border-top-color: #000;\n            border-left-color: #000;\n            border-right-color: #dfdfdf;\n            border-bottom-color: #dfdfdf;\n            outline: 1px dotted #000;\n            outline-offset: -4px;\n        }\n\n        .status {\n            font-size: 12px;\n            margin-top: 8px;\n            color: #000080;\n            font-weight: bold;\n            text-align: center;\n            min-height: 15px;\n        }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"window\">\n    <div class=\"title-bar\">\n        <span>A:\\SYS_CRYPTO.EXE<\/span>\n        <div class=\"title-bar-controls\">\n            <button aria-label=\"Minimize\">_<\/button>\n            <button aria-label=\"Maximize\">\u25a1<\/button>\n            <button aria-label=\"Close\">x<\/button>\n        <\/div>\n    <\/div>\n    \n    <div class=\"window-body\">\n        \n        <fieldset>\n            <legend>\u015eifrele ve B\u00f6l (XOR)<\/legend>\n            <div class=\"drop-zone\" id=\"dropZoneSplit\" onclick=\"document.getElementById('fileToSplit').click()\">\n                Dosyay\u0131 buraya s\u00fcr\u00fckleyin veya <br> [ G\u00f6zat ]\n                <input type=\"file\" id=\"fileToSplit\">\n            <\/div>\n            <button class=\"retro-btn\" onclick=\"splitFile()\">\u00c7ALI\u015eTIR > 2x .TXT \u0130ND\u0130R<\/button>\n            <div id=\"splitStatus\" class=\"status\"><\/div>\n        <\/fieldset>\n\n        <fieldset>\n            <legend>Kurtar (Birle\u015ftir)<\/legend>\n            <div style=\"display: flex; gap: 10px;\">\n                <div class=\"drop-zone\" id=\"dropZoneShare1\" onclick=\"document.getElementById('share1File').click()\" style=\"flex: 1;\">\n                    B\u00f6l\u00fcm 1 (.txt)\n                    <input type=\"file\" id=\"share1File\" accept=\".txt\">\n                <\/div>\n                <div class=\"drop-zone\" id=\"dropZoneShare2\" onclick=\"document.getElementById('share2File').click()\" style=\"flex: 1;\">\n                    B\u00f6l\u00fcm 2 (.txt)\n                    <input type=\"file\" id=\"share2File\" accept=\".txt\">\n                <\/div>\n            <\/div>\n            <button class=\"retro-btn\" onclick=\"mergeFiles()\">B\u0130RLE\u015eT\u0130R VE \u00c7IKART<\/button>\n            <div id=\"mergeStatus\" class=\"status\"><\/div>\n        <\/fieldset>\n\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ --- S\u00dcR\u00dcKLE BIRAK (DRAG & DROP) OLAYLARI ---\n    function setupDropZone(dropZoneId, inputId) {\n        const dropZone = document.getElementById(dropZoneId);\n        const input = document.getElementById(inputId);\n\n        dropZone.addEventListener('dragover', (e) => {\n            e.preventDefault();\n            dropZone.classList.add('dragover');\n        });\n\n        dropZone.addEventListener('dragleave', () => {\n            dropZone.classList.remove('dragover');\n        });\n\n        dropZone.addEventListener('drop', (e) => {\n            e.preventDefault();\n            dropZone.classList.remove('dragover');\n            if (e.dataTransfer.files.length) {\n                input.files = e.dataTransfer.files;\n                dropZone.innerHTML = `[ Se\u00e7ildi: ${e.dataTransfer.files[0].name} ] <input type=\"file\" id=\"${inputId}\">`;\n            }\n        });\n\n        input.addEventListener('change', () => {\n            if (input.files.length) {\n                dropZone.innerHTML = `[ Se\u00e7ildi: ${input.files[0].name} ] <input type=\"file\" id=\"${inputId}\">`;\n            }\n        });\n    }\n\n    setupDropZone('dropZoneSplit', 'fileToSplit');\n    setupDropZone('dropZoneShare1', 'share1File');\n    setupDropZone('dropZoneShare2', 'share2File');\n\n    \/\/ --- KR\u0130PTOGRAF\u0130 MOTORU (\u00d6NCEK\u0130 KODUN AYNISI) ---\n    async function bytesToBase64(bytes) {\n        const blob = new Blob([bytes]);\n        const reader = new FileReader();\n        return new Promise((resolve) => {\n            reader.onload = () => resolve(reader.result.split(',')[1]);\n            reader.readAsDataURL(blob);\n        });\n    }\n\n    async function base64ToBytes(base64) {\n        const res = await fetch('data:application\/octet-stream;base64,' + base64);\n        const buffer = await res.arrayBuffer();\n        return new Uint8Array(buffer);\n    }\n\n    function downloadBlob(blob, filename) {\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = filename;\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n    }\n\n    async function splitFile() {\n        const fileInput = document.getElementById('fileToSplit');\n        if (!fileInput.files.length) return alert(\"S\u0130STEM UYARISI: L\u00fctfen bir dosya se\u00e7in.\");\n        \n        const file = fileInput.files[0];\n        document.getElementById('splitStatus').innerText = \"\u0130\u015fleniyor...\";\n\n        const metadata = JSON.stringify({ name: file.name, type: file.type });\n        const metadataBytes = new TextEncoder().encode(metadata);\n        const metadataLengthBytes = new Uint32Array([metadataBytes.length]);\n        \n        const fileBuffer = await file.arrayBuffer();\n        const fileBytes = new Uint8Array(fileBuffer);\n\n        const totalBytes = new Uint8Array(4 + metadataBytes.length + fileBytes.length);\n        totalBytes.set(new Uint8Array(metadataLengthBytes.buffer), 0);\n        totalBytes.set(metadataBytes, 4);\n        totalBytes.set(fileBytes, 4 + metadataBytes.length);\n\n        const share1 = new Uint8Array(totalBytes.length);\n        for (let i = 0; i < share1.length; i += 65536) {\n            const chunk = share1.subarray(i, Math.min(i + 65536, share1.length));\n            crypto.getRandomValues(chunk);\n        }\n\n        const share2 = new Uint8Array(totalBytes.length);\n        for (let i = 0; i < totalBytes.length; i++) {\n            share2[i] = totalBytes[i] ^ share1[i];\n        }\n\n        const b64Share1 = await bytesToBase64(share1);\n        const b64Share2 = await bytesToBase64(share2);\n\n        downloadBlob(new Blob([b64Share1], {type: 'text\/plain'}), \"SYS_KEY_1.txt\");\n        setTimeout(() => {\n            downloadBlob(new Blob([b64Share2], {type: 'text\/plain'}), \"SYS_KEY_2.txt\");\n            document.getElementById('splitStatus').innerText = \"BA\u015eARILI: 2 Dosya \u0130ndirildi.\";\n        }, 500);\n    }\n\n    async function mergeFiles() {\n        const file1 = document.getElementById('share1File').files[0];\n        const file2 = document.getElementById('share2File').files[0];\n        \n        if (!file1 || !file2) return alert(\"S\u0130STEM UYARISI: \u0130ki par\u00e7ay\u0131 da y\u00fckleyin.\");\n        document.getElementById('mergeStatus').innerText = \"Veri kurtar\u0131l\u0131yor...\";\n\n        try {\n            const text1 = await file1.text();\n            const text2 = await file2.text();\n\n            const share1 = await base64ToBytes(text1);\n            const share2 = await base64ToBytes(text2);\n\n            if (share1.length !== share2.length) {\n                throw new Error(\"Boyut Hatas\u0131\");\n            }\n\n            const recoveredBytes = new Uint8Array(share1.length);\n            for (let i = 0; i < share1.length; i++) {\n                recoveredBytes[i] = share1[i] ^ share2[i];\n            }\n\n            const metadataLength = new Uint32Array(recoveredBytes.buffer.slice(0, 4))[0];\n            const metadataBytes = recoveredBytes.subarray(4, 4 + metadataLength);\n            const metadata = JSON.parse(new TextDecoder().decode(metadataBytes));\n            \n            const fileBytes = recoveredBytes.subarray(4 + metadataLength);\n\n            const finalBlob = new Blob([fileBytes], { type: metadata.type });\n            downloadBlob(finalBlob, metadata.name);\n            \n            document.getElementById('mergeStatus').innerText = \"BA\u015eARILI: Veri b\u00fct\u00fcnl\u00fc\u011f\u00fc sa\u011fland\u0131.\";\n        } catch (error) {\n            console.error(error);\n            document.getElementById('mergeStatus').innerText = \"\";\n            alert(\"S\u0130STEM HATASI: Dosyalar uyu\u015fmuyor.\");\n        }\n    }\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Sistem Arac\u0131 &#8211; Kriptografi A:\\SYS_CRYPTO.EXE _ \u25a1 x \u015eifrele ve B\u00f6l (XOR) Dosyay\u0131 buraya s\u00fcr\u00fckleyin veya [ G\u00f6zat ] \u00c7ALI\u015eTIR > 2x .TXT \u0130ND\u0130R Kurtar (Birle\u015ftir) B\u00f6l\u00fcm 1 (.txt) B\u00f6l\u00fcm 2 (.txt) B\u0130RLE\u015eT\u0130R VE \u00c7IKART<\/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-213","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/atakan.online\/index.php?rest_route=\/wp\/v2\/pages\/213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atakan.online\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/atakan.online\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/atakan.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atakan.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=213"}],"version-history":[{"count":1,"href":"https:\/\/atakan.online\/index.php?rest_route=\/wp\/v2\/pages\/213\/revisions"}],"predecessor-version":[{"id":214,"href":"https:\/\/atakan.online\/index.php?rest_route=\/wp\/v2\/pages\/213\/revisions\/214"}],"wp:attachment":[{"href":"https:\/\/atakan.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}