﻿
{"id":1601,"date":"2013-04-21T14:58:25","date_gmt":"2013-04-21T14:58:25","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1601"},"modified":"2013-04-21T14:58:25","modified_gmt":"2013-04-21T14:58:25","slug":"asp-net-mvc-4-0-crypto-nesnesi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-4-0-crypto-nesnesi\/","title":{"rendered":"Asp.NET MVC 4.0 CRYPTO Nesnesi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/04\/\u015eifrele.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1602\" alt=\"\u015eifrele\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/04\/\u015eifrele.jpg\" width=\"276\" height=\"183\" \/><\/a><br \/>\n\u00dcyelik sistemi olan Web projelerinde, kullan\u0131c\u0131 bilgilerinin olas\u0131 g\u00fcvenli\u011fini sa\u011flamak i\u00e7in al\u0131nan \u015fifreleri programatik olarak \u00f6nceden olu\u015fturulmu\u015f farkl\u0131 algoritmalar e\u015fli\u011finde yeniden \u015fifreleriz.Asp.NET MVC&#8217;de \u015fifreleme ve \u015fifre \u00e7\u00f6zme i\u015flemlerinde Hash metodlar\u0131 kullan\u0131lmaktad\u0131r.Hash metodlar\u0131 sayesinde verilen anahtar de\u011fer \u015fifrelendirilebilir ve \u015fifre \u00e7\u00f6z\u00fcmlemesi yap\u0131labilir.<br \/>\n<!--more--><br \/>\nAsp.NET MVC&#8217;de Hash metodlar\u0131 Crypto Helper nesnesinin i\u00e7inde bulunmaktad\u0131r.<\/p>\n<p>Crypto Helper nesnesinin kullan\u0131labilecek metodlar\u0131 a\u015fa\u011f\u0131dad\u0131r.<br \/>\n<strong>GenerateSalt<\/strong> = Rastgele byte tipinden bir dizi olu\u015fturmak amac\u0131yla kullan\u0131l\u0131r.<br \/>\n<strong>Hash(Byte(), String)<\/strong> = Verilen bir byte tipinden dizi de\u011fi\u015fkeni i\u00e7in Hash de\u011feri geriye d\u00f6nd\u00fcrecektir.<br \/>\n<strong>Hash(String, String)<\/strong> = Verilen bir string tipteki de\u011fer i\u00e7in Hash de\u011feri getire d\u00f6nd\u00fcr\u00fcr.<br \/>\n<strong>HashPassword<\/strong> = Verilen bir \u015fifre de\u011feri i\u00e7in RFC 2898 Hash de\u011ferini d\u00f6nd\u00fcr\u00fcr.<br \/>\n<strong>SHA1<\/strong> = Verilen bir \u015fifre i\u00e7in SHA-1 Hash de\u011ferini d\u00f6nd\u00fcr\u00fcr.<br \/>\n<strong>SHA256<\/strong> = Verilen bir \u015fifre i\u00e7in SHA-256 Hash de\u011ferini d\u00f6nd\u00fcr\u00fcr.<br \/>\n<strong>VerifyHashedPassword<\/strong> = Verilen RFC 2898 Hash ve Password de\u011ferlerini kar\u0131\u015ft\u0131rarak ayn\u0131 olup olmad\u0131\u011f\u0131n\u0131 denetler ve geriye bool tipinde bir de\u011fer g\u00f6nderir.<\/p>\n<p>\u015eimdi bir TextBox nesnesine girilen de\u011feri \u015fifrelemek i\u00e7in bir \u00f6rnek yapal\u0131m.Bo\u015f bir MVC projesi olu\u015ftural\u0131m ve &#8220;Home(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131m\u0131zda &#8220;Sifreleme&#8221; isminde bir Action metod olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n\r\n        &#x5B;HttpPost]\r\n        public ActionResult Sifreleme()\r\n        {\r\n            return Content(&quot;&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdi &#8220;Index&#8221; isimli Action metodumuzun View katman\u0131ndaki sayfas\u0131n\u0131 olu\u015ftural\u0131m ve kaynak kodunu a\u015fa\u011f\u0131daki gibi tasarlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    ViewBag.Title = &quot;Index&quot;;\r\n}\r\n@HtmlHelper.UnobtrusiveJavaScriptEnabled = true\r\n\/*Unobtrusive JavaScript \u00f6zelli\u011fini aktifle\u015ftiriyoruz.UnobtrusiveJavaScriptEnabled\r\nyap\u0131s\u0131 HTML ve JavaScript kodlar\u0131n\u0131 birbirinden ay\u0131rmak i\u00e7in kullan\u0131lmaktad\u0131r.*\/\r\n@using (Ajax.BeginForm(&quot;Sifreleme&quot;, new AjaxOptions { HttpMethod = &quot;POST&quot;, UpdateTargetId = &quot;gelenSonuc&quot;, InsertionMode = InsertionMode.Replace }))\r\n{\r\n    @Html.Label(&quot;\u015eifre giriniz.&quot;)\r\n    &lt;br \/&gt;\r\n    @Html.TextBox(&quot;txtGirilenSifre&quot;);\r\n    &lt;br \/&gt;\r\n    &lt;input type=&quot;submit&quot; value=&quot;\u015eifrele&quot; \/&gt;\r\n}\r\n&lt;div id=&quot;gelenSonuc&quot;&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p>Sizler yukar\u0131daki tasar\u0131msal kodlar\u0131 incelerken ben a\u015fa\u011f\u0131da neyi neden yapt\u0131k bahsediyorum.<br \/>\n&#8220;@using (Ajax.BeginForm(&#8220;Sifreleme&#8221;, new AjaxOptions { HttpMethod = &#8220;POST&#8221;, UpdateTargetId = &#8220;gelenSonuc&#8221;, InsertionMode = InsertionMode.Replace }))&#8221; sat\u0131r\u0131n\u0131 incelersek e\u011fer, burada bir form olu\u015fturuyoruz.Ancak bu form &#8220;HTML&#8221; nesnesinden de\u011fil, &#8220;Ajax&#8221; nesnesinden olu\u015fturulmaktad\u0131r.Yani bizim yapaca\u011f\u0131m\u0131z i\u015flemler neticesinde Ajax ile geriye sonu\u00e7 d\u00f6necek ve sayfa git gel yapmadan veriler sayfada g\u00f6z\u00fckecektir.<\/p>\n<p>Bu form tetiklendi\u011fi zaman, &#8220;Sifreleme&#8221; Action&#8217;\u0131 \u00e7al\u0131\u015ft\u0131racakt\u0131r ve baz\u0131 ayarlamalar yap\u0131lm\u0131\u015ft\u0131r.<br \/>\n&#8220;new AjaxOptions&#8221; nesnesi sayesinde &#8220;HttpMethod&#8221; \u00f6zelli\u011finin &#8220;Post&#8221; olaca\u011f\u0131 bildirilmi\u015ftir.&#8221;UpdateTargetId&#8221; de\u011feri sayesinde gelen sonucumuzun hangi alanda g\u00f6sterilece\u011fini yaz\u0131yoruz.Haliyle tasar\u0131m\u0131m\u0131za dikkat ederseniz id de\u011feri &#8220;gelenSonuc&#8221; isminde olan div tag\u0131m\u0131zda sonucumuzu g\u00f6sterece\u011fiz.<\/p>\n<p>&#8220;InsertionMode&#8221; \u00f6zelli\u011fi sayesinde ise d\u00f6nen de\u011ferin her defas\u0131nda ne \u015fekilde sayfaya getirelece\u011fini belirtiyoruz.\u00d6rnekte g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;Replace&#8221; belirtilirse, her g\u00f6r\u00fcnt\u00fcleme i\u015flemi \u00f6ncesinde var olan de\u011ferler silinerek, yerine yeni de\u011ferler yazd\u0131r\u0131l\u0131r.<\/p>\n<p>&#8220;InsertionMode&#8221; \u00f6zelli\u011finin &#8220;Replace&#8221; den farkl\u0131 iki \u00f6zelli\u011fi daha mevcuttur.Bunlardan biri, &#8220;InsertBefore&#8221; \u00f6zelli\u011fidir.Bu \u00f6zellik sayesinde yeni de\u011fer, g\u00f6r\u00fcnt\u00fclenen de\u011ferden daha \u00f6nce yaz\u0131l\u0131r.Bir di\u011fer \u00f6zellik ise, &#8220;InsertAfter&#8221; \u00f6zelli\u011fidir.Bunda ise, yeni de\u011fer, g\u00f6r\u00fcnt\u00fclenen de\u011ferden daha sonra yaz\u0131l\u0131r.<\/p>\n<p>Evet tasar\u0131m kodlar\u0131m\u0131zla ilgili her\u015feyi a\u00e7\u0131klam\u0131\u015f olduk.\u015eimdi programatik kodlar\u0131m\u0131z\u0131 ger\u00e7ekle\u015ftirelim.<\/p>\n<p>&#8220;Home(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131m\u0131za gelerek, &#8220;Sifreleme&#8221; ismindeki Action metodumuzu a\u015fa\u011f\u0131daki gibi g\u00fcncelleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;HttpPost]\r\n        public ActionResult Sifreleme()\r\n        {\r\n            string Sifre = Request&#x5B;&quot;txtGirilenSifre&quot;];\r\n            \/\/txtGirilenSifre ismindeki TextBox nesnemize girilen de\u011feri alm\u0131\u015f olduk.\r\n\r\n            if (Sifre.Length &gt; 0)\r\n            {\r\n                string SaltDegeri = Crypto.GenerateSalt();\r\n                \/*\r\n                 GenerateSalt metodunu kullanarak rastgele byte de\u011ferlerinden olu\u015fan\r\n                 SaltDegeri isminde bir de\u011fi\u015fken tan\u0131mlad\u0131k.\r\n                 *\/\r\n                string HashDegeri = Crypto.HashPassword(Sifre);\r\n                \/*\r\n                 Girilecek olan \u015fifre de\u011ferini Hash i\u015flemine tabii tutarak HashDegeri\r\n                 isminde bir RFC 2898 Hash de\u011feri elde etmi\u015f olduk.\r\n                 *\/\r\n                bool EsitMi = Crypto.VerifyHashedPassword(HashDegeri, Sifre);\r\n                \/*\r\n                 Burada ise, girilen \u015fifre ile HashDegeri isimli de\u011fi\u015fkenimiz i\u00e7indeki\r\n                 de\u011feri kar\u015f\u0131la\u015ft\u0131rarak ayn\u0131 m\u0131 de\u011fil mi kontrol ettik.E\u011fer ayn\u0131 ise\r\n                 true, de\u011fil ise false de\u011ferini d\u00f6necektir.\r\n                 *\/\r\n\r\n                StringBuilder sb = new StringBuilder();\r\n                sb.Append(&quot;Yazd\u0131\u011f\u0131n\u0131z \u015fifre : &quot;);\r\n                sb.Append(Sifre);\r\n                sb.Append(&quot;&lt;br&gt;&quot;);\r\n                sb.Append(&quot;Salt De\u011feri : &quot;);\r\n                sb.Append(SaltDegeri);\r\n                sb.Append(&quot;&lt;br&gt;&quot;);\r\n                sb.Append(&quot;Hash De\u011feri : &quot;);\r\n                sb.Append(HashDegeri);\r\n                sb.Append(&quot;&lt;br&gt;&quot;);\r\n                sb.Append(&quot;Hash de\u011feri ve yazd\u0131\u011f\u0131n\u0131z \u015fifre uygunlu\u011fu : &quot;);\r\n                sb.Append(EsitMi);\r\n                return Content(sb.ToString());\r\n            }\r\n            return Content(&quot;L\u00fctfen \u015fifreyi bo\u015f b\u0131rakmay\u0131n\u0131z.&quot;);\r\n        }\r\n<\/pre>\n<p>E\u011fer projeyi \u00e7al\u0131\u015ft\u0131r\u0131p denerseniz, \u015fifreleme i\u015fleminin sorunsuz ger\u00e7ekle\u015fti\u011fini g\u00f6receksiniz.<br \/>\nBir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>\u00dcyelik sistemi olan Web projelerinde, kullan\u0131c\u0131 bilgilerinin olas\u0131 g\u00fcvenli\u011fini sa\u011flamak i\u00e7in al\u0131nan \u015fifreleri programatik olarak \u00f6nceden olu\u015fturulmu\u015f farkl\u0131 algoritmalar e\u015fli\u011finde yeniden \u015fifreleriz.Asp.NET MVC&#8217;de \u015fifreleme ve \u015fifre \u00e7\u00f6zme i\u015flemlerinde Hash metodlar\u0131 kullan\u0131lmaktad\u0131r.Hash metodlar\u0131 sayesinde verilen&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,345],"tags":[744,746,415,414,412,411,283,413,410],"class_list":["post-1601","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","category-mvc-4-0","tag-ajax","tag-asp-net-mvc","tag-crypto","tag-insertafter","tag-insertbefore","tag-insertionmode","tag-mvc","tag-replace","tag-updatetargetid"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=1601"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1601\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}