{"id":419,"date":"2018-06-28T00:35:25","date_gmt":"2018-06-27T21:35:25","guid":{"rendered":"http:\/\/www.scozturk.com\/?p=419"},"modified":"2025-08-29T07:26:38","modified_gmt":"2025-08-29T07:26:38","slug":"ruby-v-hash-ve-sifreleme-uygulamalari","status":"publish","type":"post","link":"http:\/\/18.193.70.38\/?p=419&lang=tr","title":{"rendered":"Ruby &#8211; V &#8211; Hash ve \u015eifreleme Uygulamalar\u0131"},"content":{"rendered":"<p><em><strong>Giri\u015f<\/strong><\/em><br \/>\nRuby ile kolayl\u0131kla hash ve \u015fifreleme\/\u015fifre \u00e7\u00f6zme i\u015flemleri yapabilmekteyiz. Mevcut Ruby alt yap\u0131s\u0131 ile bir\u00e7ok hash ve \u015fifrelem y\u00f6ntemi do\u011frudan desteklenmektedir, bu sayede bu \u00f6zellikleri kullanabilmek i\u00e7in \u00e7ok fazla i\u015flem yapman\u0131za gerek bulunmamaktad\u0131r.<\/p>\n<p>A\u015fa\u011f\u0131daki \u00f6rnekleri inceleyelim.<\/p>\n<p><em><strong>MD5 Hash<\/strong><\/em><br \/>\nHash y\u00f6ntemlerinden en \u00e7ok kullan\u0131lan\u0131 <em>MD5<\/em> hash diyebiliriz. <em>MD5<\/em> girdi\u011finiz herhangi bir uzunlukta veriyi <em>16 byte (128 bit)<\/em> uzunlu\u011funda bir \u00f6zete \u00e7evirmektedir. <em>Ruby<\/em>&#8216;de <em>MD5<\/em> hashleme i\u015flemi ger\u00e7ekten \u00e7ok basit:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Eklenecek K\u00fct\u00fcphaneler\nrequire 'rubygems'\nrequire 'digest'  \n\n# MD5 hashlemek istedi\u011fimiz veri\nham_veri = &quot;Merhaba D\u00fcnya!&quot;\n\n# Hashleme i\u015flemi\nhashli_veri = Digest::MD5.hexdigest(ham_veri)\n\n#  Hash \u00e7\u0131kt\u0131s\u0131n\u0131 ekrana yazd\u0131ral\u0131m\nprint hashli_veri\n<\/pre>\n<p>Girdi\u011finiz ham veriyi hashleyip, hex string olarak \u00e7\u0131kt\u0131s\u0131n\u0131 size sundu.<\/p>\n<p><em><strong>SHA1 Hash<\/strong><\/em><br \/>\n<em>SHA1<\/em> ise 20 byte (160 bit) \u00f6zet olu\u015fturmaktad\u0131r:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Eklenecek K\u00fct\u00fcphaneler\nrequire 'rubygems'\nrequire 'digest'  \n\n# SHA1 hashlemek istedi\u011fimiz veri\nham_veri = &quot;Merhaba D\u00fcnya!&quot;\n\n# Hashleme i\u015flemi\nhashli_veri = Digest::SHA1.hexdigest(ham_veri)\n\n#  Hash \u00e7\u0131kt\u0131s\u0131n\u0131 ekrana yazd\u0131ral\u0131m\nprint hashli_veri\n<\/pre>\n<p><em><strong>SHA2 Hash<\/strong><\/em><br \/>\n<em>SHA2<\/em> hash&#8217;de ise <em>256, 384 ve 512bit<\/em> \u00f6zet \u00e7\u0131karan \u00fc\u00e7 farkl\u0131 se\u00e7im mevcuttur:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Eklenecek K\u00fct\u00fcphaneler\nrequire 'rubygems'\nrequire 'digest'  \n\n# SHA2 hashlemek istedi\u011fimiz veri\nham_veri = &quot;Merhaba D\u00fcnya!&quot;\n\n# 3 farkl\u0131 tipte SHA2 hashleme i\u015flemi\nhashli_veri_1 = Digest::SHA2.new(256).hexdigest(ham_veri)\nhashli_veri_2 = Digest::SHA2.new(384).hexdigest(ham_veri)\nhashli_veri_3 = Digest::SHA2.new(512).hexdigest(ham_veri)\n\n#  Hash \u00e7\u0131kt\u0131lar\u0131n\u0131 ekrana yazd\u0131ral\u0131m\nputs hashli_veri_1\nputs hashli_veri_2\nputs hashli_veri_3\n<\/pre>\n<p>Gayet kullan\u0131\u015fl\u0131.<\/p>\n<p><em><strong>Simetrik AES256 \u015eifreleme<\/strong><\/em><br \/>\n\u015eifreleme i\u00e7in bir\u00e7ok farkl\u0131 algoritma kullan\u0131labilir. Biz simetrik <em>AES 256bit<\/em> \u015fifrelemeden \u00f6rnek verelim:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Eklenecek K\u00fct\u00fcphaneler\nrequire 'rubygems'\nrequire 'digest'  \nrequire 'openssl'  \n\n# \u015eifrelemek istedi\u011fimiz ham veri\nham_veri \t\t= &quot;Merhaba!&quot;\n\n# Ham anahtar verimiz\nanahtar_verisi \t= &quot;Ruby ile kolay \u015fifreleme!&quot;\n\n# Kullanaca\u011f\u0131m\u0131z de\u011fi\u015fkenler\nsifreli_veri \t= &quot;&quot;\ncozulmus_veri \t= &quot;&quot;\nanahtar \t\t= &quot;&quot;\n\n# \u015eifrelenecek veriyi ekranda g\u00f6sterelim\nputs &quot;\u015eifrelenecek Veri:&quot; + ham_veri\n\n# Anahtar\u0131m\u0131z\u0131 olu\u015ftural\u0131m, SHA2 256bit kullanmak olduk\u00e7a mant\u0131kl\u0131\nanahtar = Digest::SHA256.digest(anahtar_verisi)\n\n# \u015eifreleyelim, AES 256bit, CBC modu\naes = OpenSSL::Cipher.new('AES-256-CBC')\naes.encrypt\naes.key = anahtar\nsifreli_veri = aes.update(ham_veri) + aes.final\n\n# \u015eifreli veriyi ekranda g\u00f6sterelim, veri base64 kodlamas\u0131nda oldu\u011fundan bir \u00f6n i\u015flemden ge\u00e7irelim\nputs &quot;\u015eifreli Veri:&quot; + &#x5B;sifreli_veri].pack('m')\n\n# \u015eifreyi \u00e7\u00f6zelim\naes.decrypt\naes.key = anahtar\ncozulmus_veri = aes.update(sifreli_veri) + aes.final\n\n# \u00c7\u00f6z\u00fclm\u00fc\u015f veriyi ekranda g\u00f6sterelim\nputs &quot;\u00c7\u00f6z\u00fclm\u00fc\u015f Veri:&quot; + cozulmus_veri\n<\/pre>\n<p><em><strong>Sonu\u00e7<\/strong><\/em><br \/>\n<em>Ruby<\/em> ile \u015fifreleme ve hashleme i\u015flemlerini g\u00f6rd\u00fck, umar\u0131m i\u015finize yarar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Giri\u015f Ruby ile kolayl\u0131kla hash ve \u015fifreleme\/\u015fifre \u00e7\u00f6zme i\u015flemleri yapabilmekteyiz. Mevcut Ruby alt yap\u0131s\u0131 ile bir\u00e7ok hash ve \u015fifrelem y\u00f6ntemi do\u011frudan desteklenmektedir, bu sayede bu \u00f6zellikleri kullanabilmek i\u00e7in&#8230;<\/p>\n","protected":false},"author":1,"featured_media":438,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[225,237,191],"tags":[243,245,247,239],"class_list":["post-419","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama-tr","category-ruby-tr","category-teknik-tr","tag-aes-tr","tag-hash-tr","tag-md5-tr","tag-ruby-tr"],"_links":{"self":[{"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/posts\/419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/18.193.70.38\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=419"}],"version-history":[{"count":1,"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/posts\/419\/revisions"}],"predecessor-version":[{"id":1199,"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/posts\/419\/revisions\/1199"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/18.193.70.38\/index.php?rest_route=\/wp\/v2\/media\/438"}],"wp:attachment":[{"href":"http:\/\/18.193.70.38\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/18.193.70.38\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=419"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/18.193.70.38\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}