CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
EVP_EncryptInit_ex(ctx, ____, NULL, key, iv);
Cevap
EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);

Açıklama: EVP_aes_256_cbc() AES-256 CBC algoritmasını seçer.

İleri seviye bölümündeki tüm dersler