Verileri Sifreleme

Bazen Text olarak girilen verileri sifreli olarak kaydetmemiz gerekebilir. Genel olarak kullanici sifreleri veritabaninda sifrelenmis olarak tutulur, bu sayede veritabanina erisebilen birisi dahi kullanicilara ait sifreleri göremez. Peki girilen verileri nasil sifreleriz. Bu makalemizde bu islemi nasil yapacagimiz ögrenecegiz.

Ilk olarak Visual Studio ile yeni bir web sitesi olusturuyoruz daha sonra Sifreleme adinda bir sinif ekliyoruz. Olusturacagimiz bu sinifi birebir kopyalayarak kendi projelerinize adapte edebilirsiniz. Olusturdugumuz sinifa ait kodlar su sekilde.
.

using System;

using System.IO;

using System.Security.Cryptography;

 

public class Sifreleme

{

    private string password = "yzSabri123";

   

    private byte[] Sifrele(byte[] SifresizVeri, byte[] Key, byte[] IV)

    {

        MemoryStream ms = new MemoryStream();

        Rijndael alg = Rijndael.Create();

        alg.Key = Key;

        alg.IV = IV;

        CryptoStream cs = new CryptoStream(ms,

        alg.CreateEncryptor(), CryptoStreamMode.Write);

        cs.Write(SifresizVeri, 0, SifresizVeri.Length);

        cs.Close();

        byte[] sifrelenmisVeri = ms.ToArray();

        return sifrelenmisVeri;

    }

 

    private byte[] SifreCoz(byte[] SifreliVeri,

                            byte[] Key, byte[] IV)

    {

        MemoryStream ms = new MemoryStream();

        Rijndael alg = Rijndael.Create();

        alg.Key = Key;

        alg.IV = IV;

        CryptoStream cs = new CryptoStream(ms,

            alg.CreateDecryptor(), CryptoStreamMode.Write);

 

        cs.Write(SifreliVeri, 0, SifreliVeri.Length);

        cs.Close();

        byte[] SifresiCozulmusVeri = ms.ToArray();

        return SifresiCozulmusVeri;

    }

 

    public string TextSifrele(string sifrelenecekMetin)

    {

        byte[] sifrelenecekByteDizisi = System.Text.Encoding.Unicode.GetBytes(sifrelenecekMetin);

        PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d,

            0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76});

 

        byte[] SifrelenmisVeri = Sifrele(sifrelenecekByteDizisi,

             pdb.GetBytes(32), pdb.GetBytes(16));

        return Convert.ToBase64String(SifrelenmisVeri);

    }   

 

    public string TextSifreCoz(string text)

    {

        byte[] SifrelenmisByteDizisi = Convert.FromBase64String(text);

        PasswordDeriveBytes pdb = new PasswordDeriveBytes(password,

            new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65,

            0x64, 0x76, 0x65, 0x64, 0x65, 0x76});

 

        byte[] SifresiCozulmusVeri = SifreCoz(SifrelenmisByteDizisi,

            pdb.GetBytes(32), pdb.GetBytes(16));

 

        return System.Text.Encoding.Unicode.GetString(SifresiCozulmusVeri);

    }

}

 

Simdi ise sifrelenecek metni girecegimiz aspx sayfamizi olusturalim. Aspx sayfamiza iki adet textbox ekleyip sifreleme islemini yapalim.

<table>

    <tr>

        <td>

            Sifrelenecek Metin

        </td>

        <td>

            <asp:TextBox Width="200px" ID="TextBoxSifrelenecekMetin" runat="server"></asp:TextBox>

            <asp:Button ID="ButtonSifrele" runat="server" Text="Sifrele"

                onclick="ButtonSifrele_Click" />

        </td>

    </tr>

    <tr>

        <td>

            Sifrelenmis Metin

        </td>

        <td>

            <asp:TextBox Width="100%" ID="TextBoxSifrelenmisMetin" runat="server"></asp:TextBox>

        </td>

    </tr>

</table>

 

Butona basinca asagidaki kodlari çalistiracagiz.

protected void ButtonSifrele_Click(object sender, EventArgs e)

{

    Sifreleme sifreleme = new Sifreleme();

    string sifrelenmisMetin = sifreleme.TextSifrele(TextBoxSifrelenecekMetin.Text);

    TextBoxSifrelenmisMetin.Text = sifrelenmisMetin;

}

 .

 

Gördügünüz gibi “sabri” yazdigim zaman karsiliginda “Pu2bqt500v7QGHCDfp8Yfg==” degeri dönüyor. Bu sekilde istedigimiz bilgileri veritabanina atmadan önce rahatça sikistirabiliriz.

Simdi sirada sifre çözme islemi var. Bunun için sayfamiza iki adet textbox ve bir buton daha ekleyelim

<tr>

                <th>

                    Sifre Çözme Islemi

                </th>

            </tr>

            <tr>

                <td>

                    Sifreli Metin

                </td>

                <td>

                    <asp:TextBox Width="200px" ID="TextBoxSifreliMetin" runat="server"></asp:TextBox>

                    <asp:Button ID="ButtonSifreCoz" runat="server" Text="SifreÇöz" OnClick="ButtonSifreCoz_Click" />

                </td>

            </tr>

            <tr>

                <td>

                    Sifresi Çözülmüs Metin

                </td>

                <td>

                    <asp:TextBox Width="100%" ID="TextBoxCozulmusMetin" runat="server"></asp:TextBox>

                </td>

</tr>


Ilk islemin tersine bu sefer

Sifre Çöz metodunu kullanacagiz.

protected void ButtonSifreCoz_Click(object sender, EventArgs e)

{

    Sifreleme sifreleme = new Sifreleme();

    string sifresiCozulmusMetin = sifreleme.TextSifreCoz(TextBoxSifreliMetin.Text);

    TextBoxCozulmusMetin.Text = sifresiCozulmusMetin;

}

 

Kullanicilara ait sifreleri veritabaninda saklamak için kullanilan yöntemlerden birini anlatmis olduk, diger bir yöntem ise kullanici sifresinin hash bilgisini almak ve bunu veritabanina kaydetmektir. Iki yöntem arasinda bariz bir fark vardir. Bizim anlattigimiz yöntemde kullanicinin sifresi veritabaninda sifreli olarak  da olsa vardir fakat hash metodunda kullanicinin sifresine artik ulasamayiz sadece hash bilgisine ulasabiliriz. Kullanici giris yapacagi zaman girdigi sifrenin hashini alip veritabani ile karsilastirarak dogru girilip girilmedigine karar veririz. Tabiki hash kullanilan yöntemlerde kullanici sifre hatirlatma fonksiyonu olmaz sadece sifre sifirlama yapilabilir. Bu konuyuda bir baska makalemizde bahsederiz.

Yukarida anlattigimiz konuya ait örnek projeyi buradan indirebilirsiniz

4 thoughts on “Verileri Sifreleme

  1. rinizi bir kez sha1 arkasindan da md5 yapin.Bunu üyelik gerektiren kullanici sifrelerini sifrelemede kullanabilirsiniz. veya substring fonksiyonu ile belli bir karekter araligini alipda sifrelemede yaptirabilirsiniz. kolay gelsin iyi çalismalar sabri.

  2. Merhaba dostum sabri, siten hayirli olsun ve güzel bir makale bende bu yazdigin kodun php de ki karsilini yazayim.

    Bu dosyanin adi sifrele php olsun..

    Post ettigimiz veri "sabri" olsun..

    <?php
    $sifre = $_POST[‘sifre’];

    echo base64_encode($sifre);
    ?>

    Ekran çiktisi : c2Ficmk=

    Bu ekran çiktisini decode edelim ne çikacak.

    <php
    echo base64_decode("c2Ficmk=");
    ?>

    Ekran çiktisi "sabri" olacaktir tekrar dönderdik encode ettigimiz string i.

    ayni sekilde sha1 ,  md5 v.b bunlarlada sifreleme yapariz ama geri dönüsümü çok zor tekrar döndermek için brute tarzinda tool yazmaniz gerek ama bu da çok uzun kasvetli bir yol pc nin cpu suna bakar ve olusturdugunuz wordliste 🙂

    yinede sifrelemenizi md5 ve sha1 yaptiniz decode edilmesinden mi korkuyorsunuz ver

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir