AES
- C kursu
- İleri seviye
- Ders 58/83
- 5 dk
AES ile simetrik şifreleme öğrenirsin.
AES nedir?
AES, simetrik bir blok şifreleme algoritmasıdır. Aynı anahtar hem şifreleme hem de çözme için kullanılır. Blok boyutu 16 bayttır; anahtar 128, 192 veya 256 bit olabilir. EVP_aes_256_cbc() 256 bit anahtar ve CBC modu seçer.
OpenSSL EVP ile akış: EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();, EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv), EVP_EncryptUpdate(ctx, out, &outl, in, inl), EVP_EncryptFinal_ex(ctx, out + outl, &fl), EVP_CIPHER_CTX_free(ctx). key 32 bayt, iv 16 bayttır. Test için tamam mesajı yeterlidir.
Şifreleme deseni
Akış: EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();, EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);, EVP_EncryptUpdate(ctx, out, &outl, in, inl);, EVP_EncryptFinal_ex(ctx, out + outl, &fl);, EVP_CIPHER_CTX_free(ctx);.
Anahtar ve IV sabit uzunlukta olmalı: anahtar 32 bayt, IV 16 bayt. Test için printf("aes tamam\n") yazdırılır; şifreli metin bayt değerlerini yazdırmak yerine sabit çıktı tercih edilir. Çözme EVP_DecryptInit_ex, EVP_DecryptUpdate, EVP_DecryptFinal_ex ile yapılır; aynı anahtar ve IV kullanılır.
Uygulama AES ile şifrele
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); ile bağlam oluştur. EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, (const unsigned char *)"01234567890123456789012345678901", (const unsigned char *)"0123456789012345"); ile başlat. unsigned char out[64]; int outl = 0; EVP_EncryptUpdate(ctx, out, &outl, (const unsigned char *)"merhaba", 7);. int fl = 0; EVP_EncryptFinal_ex(ctx, out + outl, &fl);. EVP_CIPHER_CTX_free(ctx);. printf("aes tamam\n");.
Başlangıç kodu
#include <stdio.h>
#include <openssl/evp.h>
// AES şifreleme bağlamı oluştur
// başlat, güncelle ve sonlandır
// tamam yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <openssl/evp.h>
int main(void) {
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, (const unsigned char *)"01234567890123456789012345678901", (const unsigned char *)"0123456789012345");
unsigned char out[64];
int outl = 0;
EVP_EncryptUpdate(ctx, out, &outl, (const unsigned char *)"merhaba", 7);
int fl = 0;
EVP_EncryptFinal_ex(ctx, out + outl, &fl);
EVP_CIPHER_CTX_free(ctx);
printf("aes tamam\n");
return 0;
}Beklenen çıktı
aes tamam
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 AES-256 anahtarı kaç bitir?
- 128 bit
- 256 bit Doğru cevap
- 64 bit
- 192 bit
Açıklama: AES-256 256 bitlik anahtar kullanır.
2 AES parçalarını eşle
| Kavram | Anlamı |
|---|---|
EVP_aes_256_cbc |
Algoritma |
EVP_EncryptInit_ex |
Başlat |
EVP_EncryptUpdate |
Veriyi şifrele |
EVP_EncryptFinal_ex |
Sonlandır |
3 EVP_EncryptInit_ex
EVP_EncryptInit_ex(ctx, ____, NULL, key, iv);
EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);
Açıklama: EVP_aes_256_cbc() AES-256 CBC algoritmasını seçer.