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;



Hiç yorum yok:

Yorum Gönder