DES Algoritması İle Metin Şifreleme

Bu yazıda DES algoritması ile metinleri şifreleyeceğiz

DES algoritması en güçlüsü olmasa bile oldukça sık kullanılan bir şifreleme algoritmasıdır.

Verdiğimiz 8 karakterlik anahtara göre şifreyi oluşturmaktadır.

Öncelikle algoritmayı kullanacak test uygulamamızı yazalım:

<table>
    <tr>
        <td style="width: 200px;">
            Şifrelenecek metin
        </td>
        <td>
            <asp:TextBox ID="txtMetin" runat="server" Width="250px" Text="www.daltinkurt.com u arkadaşlarımla paylaşmalıyım" />
        </td>
    </tr>
    <tr>
        <td>
            Anahtar bilgi (8 karakter)
        </td>
        <td>
            <asp:TextBox ID="txtKey" runat="server" Width="100px" Text="123abc98" />
        </td>
    </tr>
    <tr>
        <td>
        </td>
        <td>
            <asp:Button ID="btnSifrele" runat="server" Text="Şifrele" OnClick="btnSifrele_Click" />
            <br />
            <asp:CheckBox ID="cbUrl" runat="server" Text="Url Encode" />
        </td>
    </tr>
    <tr id="trSonuc" runat="server" visible="false">
        <td>
            Şifreli metin
        </td>
        <td>
            <asp:Label ID="lblSonuc" runat="server" />
        </td>
    </tr>
</table>

Algoritmayı kullanacak kodlarımız:

protected void btnSifrele_Click(object sender, EventArgs e)
{
    string metin = txtMetin.Text;
    string key = txtKey.Text;

    lblSonuc.Text = new DES_Sifreleme().Sifrele(metin, key,cbUrl.Checked);
    trSonuc.Visible = true;
}

Şimdi de şifreleme sınıfını paylaşayım:

public class DES_Sifreleme
{
    public string Sifrele(string value, string desKey)
    {
        // DES algoritması ile şifreleme
        // desKey bilgisinin 8 karakterli olması gerekiyor
        UTF8Encoding utf8Enc = new UTF8Encoding();
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        des.Key = utf8Enc.GetBytes(desKey);
        des.Mode = CipherMode.ECB;
        ICryptoTransform encryptor = des.CreateEncryptor();
        byte[] arrayByte = utf8Enc.GetBytes(value);
        byte[] enc = encryptor.TransformFinalBlock(arrayByte, 0, arrayByte.Length);
        return Convert.ToBase64String(enc);
    }

    public string Sifrele(string value, string desKey, bool urlencode)
    {
        // şifrelenmiş bilgiyi URL den parametre olarak göndereceksek 
        // Url Encode işleminden geçirmeliyiz
        if (urlencode)
            return System.Web.HttpUtility.UrlEncode(Sifrele(value, desKey));
        else
            return Sifrele(value, desKey);
    }
}

Burada Sifreleme metodunu, şifrelenmiş veriyi URL'den gönderebilmemiz için overload ettik.

URL'den göndermeyeceksek ilk metodu kullanabilirsiniz.

Lütfen dikkat: anahtar değerimiz 8 karakter olmalıdır.