Cryptography etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Cryptography etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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;

23 Ocak 2018 Salı

AesCryptoServiceProvider Sınıfı - Simetrik Şifreleme

Giriş
Açıklaması şöyle
. NET provides two implementations of the AES encryption algorithm,  AesManaged and AesCryptoServiceProcider, but which one should you use? They both provide the same functionality in that they both implement the AES encryption specification. But the main difference is that AesManaged is a .NET specific implementation whereas AesCryptoServiceProcider uses the underlying cryptography libraries in Windows, which are FIPS-certified.
Bu sınıfın kardeşi AesManaged sınıfıdır.

System.Security.Cryptography.Aes sınıfından kalıtır.

Sınıfın Key, IV, BlockSize, KeySize, Padding ve Mode alanlarını doldurmak gerekir.

1. Sınıfın Key ve IV alanları byte[] ile doldurulur.

2. BlockSize ve KeySize alanları kaç bit ile çalışmak istediğimize göre doldurulur. Örneğin BlockSize 128 bit, KeySize 256 bit yapılır.

3. Padding ve Mode doldurulur. Padding belirtilen bitten daha küçük blokların nasıl doldurulacağını belirtir.

4. CreateEncryptor veya CreateDecryptor metodları çağrılarak bir ICryptoTransform arayüzü yaratılır. Bu arayüzün TransformFinalBlock metodu kullanılarak şifreleme gerçekleşir. Ya da bu arayüzü CryptoStream ile sarmalayarak daha kolay kullanabiliriz. CryptoStream her stream'de nesnesinde olduğu gibi Read ve Write metodları sunar.
Constructor - default
Şöyle yaparız.
using (var aes = new AesCryptoServiceProvider())
{
  ...
}
Constructor
Şöyle yaparız.
byte[] key = ...; byte[] vector = ...;
using(AesCryptoServiceProvider aes = new AesCryptoServiceProvider {
 Key = key, IV = vector}) {...}
BlockSize Alanı
Şöyle yaparız.
aes.BlockSize = 128;
CreateDecryptor metodu
Using ile kullanılır. Şöyle yaparız.
using (ICryptoTransform decrypt = aes.CreateDecryptor(aes.Key, aes.IV))
{
  ...
}
CreateEncryptor metodu
Using ile kullanılır. Şöyle yaparız.
using(ICryptoTransform encryptor = aes.CreateEncryptor()){...}
Şöyle yaparız.
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
GenerateKey metodu
Key alanını rastgele değer ile doldurur. Şöyle yaparız.
aes.GenerateKey();
GenerateIV metodu
IV alanını rastgele değer ile doldurur. Şöyle yaparız.
aes.GenerateIV();

IV Alanı
Initial Vector verisi ile doldurulur. Şöyle yaparız.
string IV = "1a1a1a1a1a1a1a1a";
aes.IV = ASCIIEncoding.ASCII.GetBytes(IV);

Key Alanı
Key verisi ile doldurulur. Şöyle yaparız.
string Key = "1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a";
aes.Key = ASCIIEncoding.ASCII.GetBytes(Key);
KeySize Alanı
Şöyle yaparız.
aes.KeySize = 128;
Şöyle yaparız.
aes.KeySize = 256;
Mode Alanı
Şöyle yaparız.
aes.Mode = CipherMode.CBC;
Padding Alanı
Şöyle yaparız.
aes.Padding = PaddingMode.Zeros;
Şöyle yaparız.
aes.Padding = PaddingMode.PKCS7;



23 Ağustos 2017 Çarşamba

SHA256 Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Security.Cryptography;
Metodun amacı girdiyi 256 bit çıktı şeklinde hash'lemek. Şöyledir.
hash = sha256(input) # 256bit
ComputeHash metodu
Şöyle yaparız.
var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes("70c3bdc5ceeac673"));
Şöyle yaparız.
string file = ...;
byte[] byte = File.ReadAllBytes(file);
byte[] sha256 = SHA256.Create().ComputeHash(bytes);
Create metodu
Şöyle yaparız.
var sha256 = SHA256.Create()

17 Haziran 2016 Cuma

CryptoStream Sınıfı

Giriş
Bu sınıf ICryptoTransform arayüzünü sarmalar. ICryptoTransform arayüzü SymmetricAlgorithm sınıflarından birisi tarafından yaratılır.

Constructor - Read
Şifrelenmiş dosyadan okumak için şöyle yaparız.
FileStream fs = new FileStream(...);
ICryptoTransform cipher = ...;
CryptoStream cryptoStream = new CryptoStream(fs,cipher,CryptoStreamMode.Read);
Bu sınıf StreamReader ile kullanılabilir.
new StreamReader(cryptoStream).ReadToEnd()
Constructor - Write
Şifreleyerek dosyaya yazmak için şöyle yaparız.
FileStream fs = new FileStream(...);
ICryptoTransform cipher = ...;
CryptoStream cryptoStream = new CryptoStream(fs, cipher,CryptoStreamMode.Write);
Close metodu
Şöyle yaparız.
cryptoStream.Close();
FlushFinalBlock metodu
Şifreyi yazarken kullanılır. Şöyle yaparız.
byte[]  plainBytes = ...;
ICryptoTransform cipher = ...;
using(MemoryStream ms = new MemoryStream())
{
  using(CryptoStream cs = new CryptoStream(ms, cipher, CryptoStreamMode.Write))
  {
    csEncrypt.Write(plainBytes,0, plainBytes.Length );
    csEncrypt.FlushFinalBlock();
    return msEncrypt.ToArray();
  }
}
Write metodu
Şöyle yaparız.
byte[] data = ...;
cryptoStream.Write(data, 0, data.Length);