3DES'in Çalışma Şekli
Kullanıcı tarafından algoritmaya girilen anahtar yardımıyla, yine kullanıcı tarafından girilen karakter katarı şifrelenir. Şifreleme esnasında kullanıcıdan alınan bir anahtar kullanıldığı için, şifrelenmiş katar ters çalışan bir fonksiyon ve şifreleme esnasında kullanılan anahtar sayesinde şifrelenmemiş haline geri döndürülebilir.
Uygulama
Sifreci adı altında bir sınıf (class) yapısı tanımlanır. Bu sınıf içerisine, şifreleme ve deşifreleme işlemleri için hangi işlemler yapılacağının yazılı olduğu Sifre ve SifreCozfonksiyonları yazılır.
class Sifreci
{
public static string Sifre(string Value, string _IV, string _key)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
mCSP.IV = Convert.FromBase64String(_IV);
mCSP.Key = Convert.FromBase64String(_key);
Byte[] byt = new byte[64];
try
{
ICryptoTransform ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Encoding.UTF8.GetBytes(Value);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch (Exception Ex)
{
throw (new Exception("Şifreleme sırasında sorunla karşılaşıldı.", Ex));
}
}
public static string SifreCoz(string Value, string _IV, string _key)
{
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
mCSP.IV = Convert.FromBase64String(_IV);
mCSP.Key = Convert.FromBase64String(_key);
Byte[] byt = new byte[64];
try
{
ICryptoTransform ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(Value);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
string test = Encoding.UTF8.GetString(ms.ToArray());
return Encoding.UTF8.GetString(ms.ToArray());
}
catch (Exception ex)
{
throw (new Exception("Şifre çözme sırasında sorunla karşılaşıldı.", ex));
}
}
}
Bir Windows form uygulaması yardımıyla, yaratılmış oldan Sifreci sınıfı içerisindeki fonksiyonlar kullanılıp şifrelenmiş veri elde edilir.
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;
namespace _DES
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region "Constants"
const string _IV = "PenS8UCVF7s=";
#endregion
private void Sifrele_Click(object sender, EventArgs e)
{
string _key = SifreKutusu.Text;
string value = YaziKutusu.Text;
YaziKutusu.Text = Sifreci.Sifre(YaziKutusu.Text, _IV, SifreKutusu.Text);
}
private void Desifrele_Click(object sender, EventArgs e)
{
string _key = SifreKutusu.Text;
string value = YaziKutusu.Text;
YaziKutusu.Text = Sifreci.Desifre(YaziKutusu.Text,_IV,SifreKutusu.Text);
}
}
}