{"id":35945,"date":"2025-12-05T23:41:32","date_gmt":"2025-12-05T20:41:32","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35945"},"modified":"2025-12-05T23:41:32","modified_gmt":"2025-12-05T20:41:32","slug":"python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/","title":{"rendered":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme"},"content":{"rendered":"<p><body><\/p>\n<h2>Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda veri g\u00fcvenli\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, hem bireysel kullan\u0131c\u0131lar hem de kurumsal yap\u0131lar i\u00e7in vazge\u00e7ilmez bir \u00f6neme sahiptir. Hassas bilgilerin korunmas\u0131, ileti\u015fim gizlili\u011finin sa\u011flanmas\u0131 ve yaz\u0131l\u0131m\u0131n g\u00fcvenilirli\u011finin do\u011frulanmas\u0131, siber g\u00fcvenlik stratejilerinin temel ta\u015flar\u0131n\u0131 olu\u015fturur. Bu ba\u011flamda, a\u00e7\u0131k kaynakl\u0131 bir \u015fifreleme arac\u0131 olan GNU Privacy Guard (GnuPG veya GPG) ve onun Python aray\u00fcz\u00fc <code>python-gnupg<\/code> k\u00fct\u00fcphanesi, geli\u015ftiricilere g\u00fc\u00e7l\u00fc ve esnek \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<p>Bu rehberde, Python 3 ve <code>python-gnupg<\/code> k\u00fct\u00fcphanesini kullanarak verileri nas\u0131l \u015fifreleyece\u011fimizi, \u015fifresini nas\u0131l \u00e7\u00f6zece\u011fimizi ve kod veya dosyalar\u0131n dijital imzalar\u0131n\u0131 nas\u0131l do\u011frulayaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, uygulamalar\u0131n\u0131zda g\u00fcvenlik katman\u0131n\u0131 art\u0131rmak i\u00e7in pratik bilgiler ve kod \u00f6rnekleri sunmakt\u0131r.<\/p>\n<h3>GnuPG ve Python-GnuPG ile Kurulum ve Temel Haz\u0131rl\u0131klar<\/h3>\n<p>GnuPG, OpenPGP standard\u0131n\u0131n bir uygulamas\u0131 olup, e-posta, dosya ve disk b\u00f6l\u00fcmlerini \u015fifrelemek, imzalamak ve do\u011frulamak i\u00e7in kullan\u0131l\u0131r. <code>python-gnupg<\/code> ise, Python uygulamalar\u0131n\u0131z\u0131n GnuPG komut sat\u0131r\u0131 arac\u0131yla etkile\u015fim kurmas\u0131n\u0131 sa\u011flayan bir aray\u00fcz k\u00fct\u00fcphanesidir. Ba\u015flamadan \u00f6nce, sistemimizde GnuPG&#8217;nin kurulu oldu\u011fundan ve Python k\u00fct\u00fcphanesine sahip oldu\u011fumuzdan emin olmal\u0131y\u0131z.<\/p>\n<h4>GnuPG Kurulumu<\/h4>\n<p>GnuPG, \u00e7o\u011fu i\u015fletim sisteminde kolayca kurulabilir.<\/p>\n<p>*   <strong>Linux (Debian\/Ubuntu tabanl\u0131):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install gnupg<\/code><\/pre>\n<p>*   <strong>Linux (Fedora\/CentOS tabanl\u0131):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo dnf install gnupg<\/code><\/pre>\n<p>*   <strong>macOS:<\/strong><\/p>\n<pre><code class=\"language-bash\">brew install gnupg<\/code><\/pre>\n<p>*   <strong>Windows:<\/strong><br \/>\n    GnuPG&#8217;nin resmi web sitesinden (gnupg.org) Windows y\u00fckleyicisini indirip kurabilirsiniz.<\/p>\n<p>Kurulumdan sonra, terminalinizde <code>gpg --version<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak GnuPG&#8217;nin do\u011fru \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<h4>Python-GnuPG K\u00fct\u00fcphanesi Kurulumu<\/h4>\n<p>Python ortam\u0131n\u0131zda <code>python-gnupg<\/code> k\u00fct\u00fcphanesini kurmak i\u00e7in pip kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">pip install python-gnupg<\/code><\/pre>\n<h4>GnuPG Anahtar \u00c7ifti Olu\u015fturma<\/h4>\n<p>\u015eifreleme ve imzalama i\u015flemleri i\u00e7in bir anahtar \u00e7iftine (genel ve \u00f6zel anahtar) ihtiyac\u0131m\u0131z olacak. E\u011fer daha \u00f6nce bir GPG anahtar\u0131n\u0131z yoksa, a\u015fa\u011f\u0131daki komutla olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">gpg --full-generate-key<\/code><\/pre>\n<p>Bu komut, anahtar t\u00fcr\u00fc, anahtar boyutu, son kullanma tarihi, ad\u0131n\u0131z, e-posta adresiniz gibi bilgileri girmenizi isteyecektir. G\u00fcvenli bir parola (passphrase) belirlemeyi unutmay\u0131n; bu parola, \u00f6zel anahtar\u0131n\u0131z\u0131 kullan\u0131rken gerekli olacakt\u0131r.<\/p>\n<p>Olu\u015fturdu\u011funuz anahtarlar\u0131 listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">gpg --list-keys<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da anahtar\u0131n\u0131z\u0131n parmak izini (fingerprint) ve anahtar kimli\u011fini (key ID) g\u00f6receksiniz. Bu bilgiler, \u015fifreleme ve imzalama i\u015flemlerinde kullan\u0131lacakt\u0131r.<\/p>\n<p>\u00d6rnek bir anahtar listesi \u00e7\u0131kt\u0131s\u0131:<\/p>\n<pre><code class=\"language-\">\/home\/kullanici\/.gnupg\/pubring.kbx\n----------------------------------\npub   rsa4096 2023-10-27 [SC]\n      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF\nuid           [ultimate] Kullan\u0131c\u0131 Ad\u0131 <eposta@example.com>\nsub   rsa4096 2023-10-27 [E]<\/code><\/pre>\n<p>Buradaki <code>ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF<\/code> sizin anahtar parmak izinizdir. Anahtar kimli\u011fi genellikle parmak izinin son 8 veya 16 karakteridir.<\/p>\n<h3>Veri \u015eifreleme ve \u015eifre \u00c7\u00f6zme<\/h3>\n<p>Asimetrik \u015fifreleme, iki anahtar\u0131n kullan\u0131ld\u0131\u011f\u0131 bir y\u00f6ntemdir: genel anahtar (public key) ve \u00f6zel anahtar (private key). Genel anahtar herkesle payla\u015f\u0131labilir ve veriyi \u015fifrelemek i\u00e7in kullan\u0131l\u0131r. \u00d6zel anahtar ise sadece sahibinde kal\u0131r ve \u015fifrelenmi\u015f veriyi \u00e7\u00f6zmek i\u00e7in kullan\u0131l\u0131r. <code>python-gnupg<\/code> bu s\u00fcreci Python \u00fczerinden y\u00f6netmenizi sa\u011flar.<\/p>\n<h4>Metin \u015eifreleme<\/h4>\n<p>Bir metni \u015fifrelemek i\u00e7in, al\u0131c\u0131n\u0131n genel anahtar\u0131na ihtiyac\u0131m\u0131z vard\u0131r. Al\u0131c\u0131n\u0131n genel anahtar\u0131 yerel anahtar halkam\u0131zda (keyring) olmal\u0131d\u0131r. E\u011fer al\u0131c\u0131n\u0131n genel anahtar\u0131 yoksa, onu anahtar sunucular\u0131ndan (<code>gpg --recv-keys <anahtar_kimli\u011fi><\/code>) veya do\u011frudan al\u0131c\u0131dan al\u0131p i\u00e7e aktarman\u0131z (<code>gpg --import <genel_anahtar_dosyas\u0131.asc><\/code>) gerekir.<\/p>\n<pre><code class=\"language-python\">import gnupg\n\n<h2>GnuPG anahtar halkas\u0131n\u0131n yolunu belirtin (varsay\u0131lan genellikle yeterlidir)<\/h2>\ngpg = gnupg.GPG(gnupghome='\/home\/kullanici\/.gnupg')\n\n<h2>Al\u0131c\u0131n\u0131n anahtar kimli\u011fi (\u00f6rne\u011fin, kendi anahtar\u0131n\u0131z\u0131n kimli\u011fi)<\/h2>\n<h2>Anahtar kimli\u011fini 'gpg --list-keys' komutuyla bulabilirsiniz.<\/h2>\nrecipient_key_id = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF\" # Kendi anahtar parmak izinizi buraya yaz\u0131n\n\n<h2>\u015eifrelenecek metin<\/h2>\nplaintext = \"Bu \u00e7ok gizli bir mesajd\u0131r ve sadece yetkili ki\u015filer taraf\u0131ndan okunmal\u0131d\u0131r.\"\n\n<h2>Metni \u015fifrele<\/h2>\n<h2>'recipients' listesine \u015fifrelemek istedi\u011finiz anahtarlar\u0131n kimliklerini ekleyin.<\/h2>\n<h2>Bu anahtarlar\u0131n genel anahtarlar\u0131 yerel anahtar halkas\u0131nda bulunmal\u0131d\u0131r.<\/h2>\nencrypted_data = gpg.encrypt(plaintext, recipients=[recipient_key_id])\n\nif encrypted_data.ok:\n    print(\"\u015eifreleme ba\u015far\u0131l\u0131.\")\n    print(\"\u015eifrelenmi\u015f Metin:\")\n    print(str(encrypted_data))\nelse:\n    print(\"\u015eifreleme ba\u015far\u0131s\u0131z oldu:\", encrypted_data.status)\n    print(\"Hata mesaj\u0131:\", encrypted_data.stderr)\n\n<h2>\u00d6rnek \u00c7\u0131kt\u0131:<\/h2>\n<h2>\u015eifreleme ba\u015far\u0131l\u0131.<\/h2>\n<h2>\u015eifrelenmi\u015f Metin:<\/h2>\n<h2>-----BEGIN PGP MESSAGE-----<\/h2>\n<h2>... (\u015fifrelenmi\u015f metin) ...<\/h2>\n<h2>-----END PGP MESSAGE-----<\/code><\/pre>\n<\/h2>\n<h4>Dosya \u015eifreleme<\/h4>\n<p>B\u00fcy\u00fck miktarda veriyi veya dosyalar\u0131 \u015fifrelemek i\u00e7in <code>encrypt_file<\/code> metodunu kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-python\">import gnupg\n\ngpg = gnupg.GPG(gnupghome='\/home\/kullanici\/.gnupg')\nrecipient_key_id = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF\" # Kendi anahtar parmak izinizi buraya yaz\u0131n\n\n<h2>\u015eifrelenecek \u00f6rnek bir dosya olu\u015ftural\u0131m<\/h2>\nwith open('gizli_belge.txt', 'w') as f:\n    f.write(\"Bu belge \u00e7ok \u00f6nemli veriler i\u00e7eriyor.\")\n\n<h2>Dosyay\u0131 \u015fifrele<\/h2>\nwith open('gizli_belge.txt', 'rb') as f:\n    # output parametresi ile \u015fifrelenmi\u015f \u00e7\u0131kt\u0131n\u0131n yaz\u0131laca\u011f\u0131 dosyay\u0131 belirtiyoruz.\n    status = gpg.encrypt_file(f, recipients=[recipient_key_id], output='gizli_belge.txt.gpg')\n\nif status.ok:\n    print(\"Dosya \u015fifreleme ba\u015far\u0131l\u0131.\")\n    print(f\"\u015eifrelenmi\u015f dosya: {status.file_name}\")\nelse:\n    print(\"Dosya \u015fifreleme ba\u015far\u0131s\u0131z oldu:\", status.status)\n    print(\"Hata mesaj\u0131:\", status.stderr)<\/code><\/pre>\n<h4>\u015eifre \u00c7\u00f6zme<\/h4>\n<p>\u015eifrelenmi\u015f bir metni veya dosyay\u0131 \u00e7\u00f6zmek i\u00e7in, ilgili \u00f6zel anahtar\u0131n yerel anahtar halkas\u0131nda olmas\u0131 ve \u00f6zel anahtar\u0131n parolas\u0131n\u0131n bilinmesi gerekir. <code>python-gnupg<\/code>, parolan\u0131z\u0131 do\u011frudan koda g\u00f6mmenize veya GnuPG ajan\u0131n\u0131n parola istemesini beklemenize olanak tan\u0131r. G\u00fcvenlik nedeniyle, parolay\u0131 do\u011frudan koda g\u00f6mmek yerine GnuPG ajan\u0131 taraf\u0131ndan y\u00f6netilmesini sa\u011flamak daha iyidir.<\/p>\n<pre><code class=\"language-python\">import gnupg\n\ngpg = gnupg.GPG(gnupghome='\/home\/kullanici\/.gnupg')\n\n<h2>\u00d6rnek \u015fifrelenmi\u015f metin (yukar\u0131daki \u00f6rnekten al\u0131nm\u0131\u015ft\u0131r)<\/h2>\n<h2>Bu k\u0131s\u0131m, \u015fifrelenmi\u015f_data de\u011fi\u015fkeninden veya bir dosyadan okunabilir.<\/h2>\nencrypted_text_example = \"\"\"-----BEGIN PGP MESSAGE-----\n... (buraya \u015fifrelenmi\u015f metni yap\u0131\u015ft\u0131r\u0131n) ...\n-----END PGP MESSAGE-----\"\"\"\n\n<h2>Metin \u015fifre \u00e7\u00f6zme<\/h2>\n<h2>GnuPG ajan\u0131 parola isteyebilir veya 'passphrase' parametresi ile do\u011frudan parola verilebilir.<\/h2>\n<h2>G\u00fcvenlik nedeniyle, 'passphrase' parametresini kullan\u0131rken dikkatli olun.<\/h2>\ndecrypted_data = gpg.decrypt(encrypted_text_example) # veya passphrase='sizin_parolan\u0131z'\n\nif decrypted_data.ok:\n    print(\"\u015eifre \u00e7\u00f6zme ba\u015far\u0131l\u0131.\")\n    print(\"\u00c7\u00f6z\u00fclm\u00fc\u015f Metin:\")\n    print(str(decrypted_data))\nelse:\n    print(\"\u015eifre \u00e7\u00f6zme ba\u015far\u0131s\u0131z oldu:\", decrypted_data.status)\n    print(\"Hata mesaj\u0131:\", decrypted_data.stderr)\n\n<h2>Dosya \u015fifre \u00e7\u00f6zme<\/h2>\nwith open('gizli_belge.txt.gpg', 'rb') as f:\n    decrypted_file = gpg.decrypt_file(f, output='cozulmus_belge.txt') # veya passphrase='sizin_parolan\u0131z'\n\nif decrypted_file.ok:\n    print(\"Dosya \u015fifre \u00e7\u00f6zme ba\u015far\u0131l\u0131.\")\n    print(f\"\u00c7\u00f6z\u00fclm\u00fc\u015f dosya: {decrypted_file.file_name}\")\n    with open('cozulmus_belge.txt', 'r') as f:\n        print(\"\u0130\u00e7erik:\", f.read())\nelse:\n    print(\"Dosya \u015fifre \u00e7\u00f6zme ba\u015far\u0131s\u0131z oldu:\", decrypted_file.status)\n    print(\"Hata mesaj\u0131:\", decrypted_file.stderr)<\/code><\/pre>\n<h3>Kod\/Dosya Do\u011frulama ve \u0130mzalama<\/h3>\n<p>Dijital imzalar, bir dosyan\u0131n veya kod par\u00e7as\u0131n\u0131n belirli bir ki\u015fi veya varl\u0131k taraf\u0131ndan olu\u015fturuldu\u011funu ve i\u00e7eri\u011finin de\u011fi\u015ftirilmedi\u011fini do\u011frulamak i\u00e7in kullan\u0131l\u0131r. Bu, yaz\u0131l\u0131m g\u00fcncellemelerinin veya \u00f6nemli belgelerin g\u00fcvenilirli\u011fini sa\u011flamak a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir.<\/p>\n<h4>Dosya \u0130mzalama<\/h4>\n<p>Bir dosyay\u0131 imzalamak i\u00e7in, imzalayan\u0131n \u00f6zel anahtar\u0131na ihtiyac\u0131m\u0131z vard\u0131r.<\/p>\n<pre><code class=\"language-python\">import gnupg\n\ngpg = gnupg.GPG(gnupghome='\/home\/kullanici\/.gnupg')\nsigning_key_id = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF\" # Kendi anahtar parmak izinizi buraya yaz\u0131n\n\n<h2>\u0130mzalanacak \u00f6rnek bir dosya olu\u015ftural\u0131m<\/h2>\nwith open('kaynak_kod.py', 'w') as f:\n    f.write(\"print('Merhaba, d\u00fcnya!')\\n\")\n    f.write(\"def topla(a, b): return a + b\\n\")\n\n<h2>Dosyay\u0131 ayr\u0131k (detached) bir imza ile imzala<\/h2>\n<h2>Ayr\u0131k imza, orijinal dosyan\u0131n kendisini de\u011fi\u015ftirmeden ayr\u0131 bir .sig dosyas\u0131 olu\u015fturur.<\/h2>\nwith open('kaynak_kod.py', 'rb') as f:\n    status = gpg.sign_file(f, keyid=signing_key_id, detach=True, output='kaynak_kod.py.sig')\n\nif status.ok:\n    print(\"Dosya imzalama ba\u015far\u0131l\u0131.\")\n    print(f\"\u0130mza dosyas\u0131: {status.file_name}\")\nelse:\n    print(\"Dosya imzalama ba\u015far\u0131s\u0131z oldu:\", status.status)\n    print(\"Hata mesaj\u0131:\", status.stderr)<\/code><\/pre>\n<p><code>clearsign=True<\/code> parametresi ile imzan\u0131n orijinal metinle birlikte, okunabilir bir formatta oldu\u011fu bir &#8220;clear-signed&#8221; dosya da olu\u015fturulabilir. Ancak, genellikle kod ve ikili dosyalar i\u00e7in ayr\u0131k imzalar tercih edilir.<\/p>\n<h4>\u0130mza Do\u011frulama<\/h4>\n<p>Bir dosyan\u0131n imzas\u0131n\u0131 do\u011frulamak i\u00e7in, imzalayan\u0131n genel anahtar\u0131n\u0131n yerel anahtar halkam\u0131zda bulunmas\u0131 gerekir.<\/p>\n<pre><code class=\"language-python\">import gnupg\n\ngpg = gnupg.GPG(gnupghome='\/home\/kullanici\/.gnupg')\n\n<h2>Do\u011frulanacak dosya ve imza dosyas\u0131<\/h2>\noriginal_file = 'kaynak_kod.py'\nsignature_file = 'kaynak_kod.py.sig'\n\n<h2>\u0130mza do\u011frulama<\/h2>\nwith open(original_file, 'rb') as f_original:\n    with open(signature_file, 'rb') as f_signature:\n        # verify_file metoduna hem orijinal dosyay\u0131 hem de imza dosyas\u0131n\u0131 veriyoruz.\n        # GnuPG, imzalayan\u0131n genel anahtar\u0131n\u0131 otomatik olarak arayacakt\u0131r.\n        verify_result = gpg.verify_file(f_original, f_signature)\n\nif verify_result.valid:\n    print(\"\u0130mza do\u011frulama ba\u015far\u0131l\u0131!\")\n    print(f\"\u0130mzalayan: {verify_result.username}\")\n    print(f\"Parmak \u0130zi: {verify_result.fingerprint}\")\n    print(f\"Durum: {verify_result.status}\")\n    # 'trust_level' ve 'sig_class' gibi di\u011fer \u00f6zellikleri de kontrol edilebilir.\nelse:\n    print(\"\u0130mza do\u011frulama ba\u015far\u0131s\u0131z veya ge\u00e7ersiz.\")\n    print(f\"Durum: {verify_result.status}\")\n    print(f\"Hata mesaj\u0131: {verify_result.stderr}\")\n    if verify_result.fingerprint:\n        print(f\"\u0130mzalayan\u0131n parmak izi: {verify_result.fingerprint}\")\n        print(\"Bu anahtar\u0131n yerel anahtar halkas\u0131nda g\u00fcvenilir olarak i\u015faretlenip i\u015faretlenmedi\u011fini kontrol edin.\")\n    else:\n        print(\"\u0130mzalayan\u0131n genel anahtar\u0131 bulunamad\u0131 veya i\u00e7e aktar\u0131lmad\u0131.\")<\/code><\/pre>\n<p><code>verify_result<\/code> nesnesi, imzan\u0131n ge\u00e7erlili\u011fi (<code>valid<\/code> \u00f6zelli\u011fi), imzalayan\u0131n kullan\u0131c\u0131 ad\u0131, parmak izi ve do\u011frulama durumu gibi \u00f6nemli bilgiler i\u00e7erir. <code>status<\/code> \u00f6zelli\u011fi, imzan\u0131n ge\u00e7erli olup olmad\u0131\u011f\u0131n\u0131 (\u00f6rne\u011fin, &#8216;signature valid&#8217;), veya neden ge\u00e7ersiz oldu\u011funu (\u00f6rne\u011fin, &#8216;bad signature&#8217;) belirtir.<\/p>\n<p><strong>G\u00fcven Modeli (Web of Trust):<\/strong> GnuPG, anahtarlar\u0131n g\u00fcvenilirli\u011fini do\u011frulamak i\u00e7in bir &#8220;g\u00fcven a\u011f\u0131&#8221; (Web of Trust) kullan\u0131r. Bir anahtar\u0131n sadece var olmas\u0131 de\u011fil, ayn\u0131 zamanda sizin veya g\u00fcvendi\u011finiz ba\u015fka bir anahtar taraf\u0131ndan da onaylanm\u0131\u015f olmas\u0131 \u00f6nemlidir. Bu, sahte anahtarlara kar\u015f\u0131 koruma sa\u011flar. Yeni bir genel anahtar\u0131 i\u00e7e aktard\u0131\u011f\u0131n\u0131zda, onu manuel olarak imzalaman\u0131z veya g\u00fcven d\u00fczeyini ayarlaman\u0131z gerekebilir.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Bu rehberde, Python&#8217;\u0131n <code>python-gnupg<\/code> k\u00fct\u00fcphanesini kullanarak GnuPG&#8217;nin temel \u015fifreleme, \u015fifre \u00e7\u00f6zme, imzalama ve do\u011frulama yeteneklerini nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendiniz. Bu ara\u00e7lar, yaz\u0131l\u0131m geli\u015ftirme, g\u00fcvenli ileti\u015fim ve veri depolama gibi bir\u00e7ok alanda uygulamalar\u0131n\u0131z\u0131n g\u00fcvenlik seviyesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131za yard\u0131mc\u0131 olabilir. Veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak ve hassas bilgilerin gizlili\u011fini korumak i\u00e7in GnuPG gibi g\u00fc\u00e7l\u00fc \u015fifreleme ara\u00e7lar\u0131n\u0131 kullanmak, modern yaz\u0131l\u0131m geli\u015ftirmenin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<p><strong>1. GnuPG anahtarlar\u0131m\u0131 nas\u0131l yedeklerim?<\/strong><br \/>\n\u00d6zel anahtarlar\u0131n\u0131z\u0131 yedeklemek hayati \u00f6neme sahiptir. \u00d6zel anahtar\u0131n\u0131z\u0131 kaybetmeniz durumunda, onunla \u015fifrelenmi\u015f verilere veya imzalanm\u0131\u015f dosyalara eri\u015fiminizi kaybedersiniz. \u00d6zel anahtar\u0131n\u0131z\u0131 d\u0131\u015fa aktarmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">gpg --armor --export-secret-keys <anahtar_kimli\u011fi> > ozel_anahtarim.asc<\/code><\/pre>\n<p>Bu dosyay\u0131 g\u00fcvenli bir yerde saklay\u0131n (\u00f6rne\u011fin, \u015fifreli bir USB s\u00fcr\u00fcc\u00fcde veya g\u00fcvenli bulut depolama alan\u0131nda). Genel anahtar\u0131n\u0131z\u0131 d\u0131\u015fa aktarmak i\u00e7in ise:<\/p>\n<pre><code class=\"language-bash\">gpg --armor --export <anahtar_kimli\u011fi> > genel_anahtarim.asc<\/code><\/pre>\n<p><strong>2. GnuPG \u00f6zel anahtar\u0131m\u0131n parolas\u0131n\u0131 unutursam ne olur?<\/strong><br \/>\nMaalesef, \u00f6zel anahtar\u0131n\u0131z\u0131n parolas\u0131n\u0131 unutman\u0131z durumunda, anahtar\u0131n\u0131z\u0131 kullanman\u0131z m\u00fcmk\u00fcn olmaz. GnuPG&#8217;de parolay\u0131 kurtarman\u0131n bir yolu yoktur. Bu nedenle, anahtar\u0131n\u0131z\u0131 olu\u015ftururken se\u00e7ti\u011finiz parolay\u0131 g\u00fcvenli bir \u015fekilde saklaman\u0131z ve unutmaman\u0131z \u00e7ok \u00f6nemlidir. Parolay\u0131 unuttuysan\u0131z, yeni bir anahtar \u00e7ifti olu\u015fturman\u0131z gerekecektir.<\/p>\n<p><strong>3. Genel anahtar\u0131m\u0131 anahtar sunucusuna nas\u0131l y\u00fcklerim?<\/strong><br \/>\nGenel anahtar\u0131n\u0131z\u0131 bir anahtar sunucusuna y\u00fcklemek, di\u011fer ki\u015filerin anahtar\u0131n\u0131z\u0131 kolayca bulup sizinle \u015fifreli ileti\u015fim kurmas\u0131n\u0131 veya imzalar\u0131n\u0131z\u0131 do\u011frulamas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">gpg --send-keys <anahtar_kimli\u011fi><\/code><\/pre>\n<p>Bu komut, anahtar\u0131n\u0131z\u0131 varsay\u0131lan OpenPGP anahtar sunucusuna y\u00fckler.<\/p>\n<p><strong>4. <code>python-gnupg<\/code> yerine ba\u015fka Python GPG k\u00fct\u00fcphaneleri var m\u0131?<\/strong><br \/>\nEvet, <code>python-gnupg<\/code> en yayg\u0131n ve olgun k\u00fct\u00fcphanelerden biridir. Ancak, daha d\u00fc\u015f\u00fck seviyeli kriptografik i\u015flemleri veya farkl\u0131 OpenPGP k\u00fct\u00fcphanelerini kullanan ba\u015fka alternatifler de olabilir. Ancak, GnuPG&#8217;nin g\u00fcvenilirli\u011fi ve geni\u015f kullan\u0131m\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, <code>python-gnupg<\/code> \u00e7o\u011fu kullan\u0131m durumu i\u00e7in m\u00fckemmel bir se\u00e7imdir.<\/p>\n<p><strong>5. GnuPG ile simetrik \u015fifreleme yapabilir miyim?<\/strong><br \/>\nEvet, GnuPG asimetrik \u015fifrelemenin yan\u0131 s\u0131ra simetrik \u015fifrelemeyi de destekler. Simetrik \u015fifrelemede, hem \u015fifreleme hem de \u015fifre \u00e7\u00f6zme i\u00e7in tek bir anahtar (veya parola) kullan\u0131l\u0131r. <code>python-gnupg<\/code> ile do\u011frudan simetrik \u015fifreleme yapmak i\u00e7in <code>gpg.encrypt<\/code> metodunu <code>recipients<\/code> parametresi olmadan ve <code>passphrase<\/code> parametresiyle kullanabilirsiniz. Ancak genellikle GnuPG, anahtar y\u00f6netimi ve g\u00fcven modeli nedeniyle asimetrik \u015fifreleme i\u00e7in tercih edilirken, simetrik \u015fifreleme daha \u00e7ok yerel dosya \u015fifrelemesi gibi durumlar i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme\nG\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda veri g\u00fcvenli\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, hem bireysel kullan\u0131c\u0131l","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-35945","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme\" \/>\n<meta property=\"og:description\" content=\"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda veri g\u00fcvenli\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, hem bireysel kullan\u0131c\u0131l\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-05T20:41:32+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme\",\"datePublished\":\"2025-12-05T20:41:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\"},\"wordCount\":1368,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\",\"name\":\"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-05T20:41:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/","og_locale":"tr_TR","og_type":"article","og_title":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme","og_description":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda veri g\u00fcvenli\u011fi ve b\u00fct\u00fcnl\u00fc\u011f\u00fc, hem bireysel kullan\u0131c\u0131l","og_url":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-05T20:41:32+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme","datePublished":"2025-12-05T20:41:32+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/"},"wordCount":1368,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/","url":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/","name":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-05T20:41:32+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-gnupg-ile-kod-dogrulama-ve-veri-sifreleme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python ve GnuPG ile Kod Do\u011frulama ve Veri \u015eifreleme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35945"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35945\/revisions"}],"predecessor-version":[{"id":35946,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35945\/revisions\/35946"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}