30 Mayıs 2018 Çarşamba

DESCryptoServiceProvider Sınıfı - Simetrik Şifreleme

Giriş
System.Security.Cryptography.DES sınıfından kalıtır. Sınıfın Key ve IV alanları byte[] ile doldurulur.
Daha sonra CreateEncryptor veya CreateDecryptor metodları çağrılarak bir nesne yaratılır. Bu nesne genellikle CryptoStream ile kullanılır.

Kullanım
 Önce bir anahtar belirlenir.
public static string secretKey = "abcdefgh";
Daha sonra bir encryptor yaratılır. Bütün encryptor'lar ICryptoTransform arayüzünden kalıtırlar.
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(secretKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(secretKey);
var encryptor = DES.CreateEncryptor(DES.Key, DES.IV);
encryptor şöyle PerformCrypto metoduna geçilir.  PerformCrypto metodunda önce bir CryptoStream yaratılır ve içine encryptor ile MemoryStream verilir. CryptoStream yazılan veriyi şifreler ve MemoryStream'e doldurur.
public static byte[] PerformCrypto(ICryptoTransform cryptoTransform, byte[] data)
{
  using (var memoryStream = new MemoryStream())
  {
    using (var cryptoStream = new CryptoStream(memStream,cryptoTransform,
      CryptoStreamMode.Write))
    {
      cryptoStream.Write(data, 0, data.Length);
      cryptoStream.FlushFinalBlock();
      return memoryStream.ToArray();
    }
  }
}
Constructor
Using ile kullanılır. Şöyle yaparız.
using(DESCryptoServiceProvider des = new DESCryptoServiceProvider()){...}
Şöyle yaparız.
DES des = new DESCryptoServiceProvider();
CreateDecryptor metodu
Şöyle yaparız.
ICryptoTransform desdecrypt = des.CreateDecryptor();
CreateEncryptor metodu
Şöyle yaparız.
ICryptoTransform desencrypt = des.CreateEncryptor();
CreateEncryptor metodu - Key + IV 
Şöyle yaparız.
byte[] key = ...;
byte[] iv = ...;
ICryptoTransform desencrypt = des.CreateEncryptor(key, iv);
GenerateIV metodu
Şöyle yaparız.
byte[] keyBytes = ...;
des.GenerateIV();
ICryptoTransform desencrypt = des.CreateEncryptor(keyBytes, des.IV);
IV Alanı
Şöyle yaparız.
string sKey = ...;
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
Key Alanı
Şöyle yaparız.
string sKey = ...;
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
Padding Alanı
Şöyle yaparız.
des.Padding = PaddingMode.None;

Hiç yorum yok:

Yorum Gönder