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;
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;