0Pricing
Java Academy · Ders

AES Simetrik Şifreleme

Hassas verileri Java'nın javax.crypto API'sini kullanarak AES/CBC/PKCS5Padding ile şifreleyin ve şifrelerini çözün.

AES Simetrik Şifreleme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Simetrik ve Asimetrik Şifreleme

Simetrik şifreleme, şifreleme ve şifre çözme için aynı anahtarı kullanır (hızlıdır, toplu veriler için uygundur). Asimetrik şifreleme, bir genel/gizli anahtar çifti kullanır (daha yavaştır; anahtar değişimi ve imzalar için kullanılır). AES, standart simetrik şifreleme algoritmasıdır.

AES Modları: CBC ve GCM

AES'in çeşitli modları vardır. AES/CBC/PKCS5Padding yaygındır ancak kimlik doğrulamasından yoksundur. AES/GCM/NoPadding hem şifreleme hem de kimlik doğrulaması (AEAD) sağlar — yeni kodlarda kesinlikle tercih edilmelidir.

AES Anahtarı Oluşturma

256 bitlik bir AES anahtarını güvenli biçimde oluşturmak için KeyGenerator kullanın.

KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(256); // 256-bit key
SecretKey key = kg.generateKey();
// Persist the key:
String b64Key = Base64.getEncoder().encodeToString(key.getEncoded());
// Restore the key:
byte[] decoded = Base64.getDecoder().decode(b64Key);
SecretKey restored = new SecretKeySpec(decoded, "AES");

AES/GCM Şifrelemesi

GCM modu, her şifreleme işlemi için benzersiz bir 12 baytlık Başlatma Vektörü (IV) gerektirir. Her şifreleme işleminde yeni ve rastgele bir IV oluşturun — aynı anahtarla bir IV'yi asla yeniden kullanmayın.

byte[] iv = new byte[12]; // 96-bit IV for GCM
new SecureRandom().nextBytes(iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv); // 128-bit auth tag
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte[] ciphertext = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
// Transmit/store: IV + ciphertext (IV is not secret)

AES/GCM Şifre Çözme

IV'yi depolanan veriden çıkarın, belirtimi yeniden oluşturun ve şifreyi çözün. GCM, özgünlüğü otomatik olarak doğrular — kurcalanmış veriler AEADBadTagException oluşturur.

// Assume stored = iv + ciphertext:
byte[] iv         = Arrays.copyOfRange(stored, 0, 12);
byte[] ciphertext = Arrays.copyOfRange(stored, 12, stored.length);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] plaintext = cipher.doFinal(ciphertext); // throws if tampered

IV'yi Şifreli Metinle Depolama

IV gizli değildir — IV'yi şifreli metnin başına ekleyerek veya onun yanında depolayın. Alıcının şifreyi çözmek için IV'ye ihtiyacı vardır. Anahtar gizli tutulmalıdır.

byte[] encryptedData = new byte[iv.length + ciphertext.length];
System.arraycopy(iv,         0, encryptedData, 0,          iv.length);
System.arraycopy(ciphertext, 0, encryptedData, iv.length, ciphertext.length);
String b64 = Base64.getEncoder().encodeToString(encryptedData);

Paroladan Anahtar Türetme (PBKDF2)

Bir parolayı asla doğrudan AES anahtarı olarak kullanmayın — entropisi çok düşüktür. Rastgele bir tuz ve yüksek yineleme sayısı kullanarak PBKDF2 ile anahtar türetin.

PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 310_000, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] keyBytes = skf.generateSecret(spec).getEncoded();
SecretKey key = new SecretKeySpec(keyBytes, "AES");

Java Güvenlik Sağlayıcısını Kullanma

JDK'nin varsayılan sağlayıcısı AES'i işler. Ek algoritmalar veya FIPS uyumluluğu için Bouncy Castle sağlayıcısını kullanın.

// With Bouncy Castle:
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");

Zarf Şifreleme Deseni

Verileri rastgele oluşturulmuş bir Veri Şifreleme Anahtarı (DEK) ile şifreleyin. DEK'yi bir KMS'de (AWS KMS, HashiCorp Vault) depolanan Anahtar Şifreleme Anahtarı (KEK) ile şifreleyin. Bu, anahtarın açığa çıkmasını sınırlar.

Spring Uygulamalarında AES

Spring Security'nin TextEncryptor bileşeni veya Spring Security Crypto modülü, Cipher/IV'yi elle yönetmeden üst düzey AES şifrelemesi sağlar.

TextEncryptor encryptor = Encryptors.text(password, salt);
String encrypted = encryptor.encrypt("sensitive data");
String decrypted = encryptor.decrypt(encrypted);

Yaygın Tuzaklar

Asla şunları yapmayın: aynı anahtarla bir IV'yi yeniden kullanmayın, ECB modunu kullanmayın (örüntüler korunur), parolayı doğrudan anahtar olarak kullanmayın veya kimlik doğrulama etiketini yok saymayın. Yeni kodlarda her zaman GCM kullanın.

Hızlı Kontrol

AES/GCM, AES/CBC'nin sağlamadığı neyi sağlar?

Özet

Kimlik doğrulamalı şifreleme için AES/GCM/NoPadding kullanın. Her şifreleme için yeni ve rastgele bir 12 baytlık IV oluşturun. IV'yi şifreli metnin başına ekleyin. Anahtarları parolalardan PBKDF2 ile türetin. Aynı anahtarla bir IV'yi asla yeniden kullanmayın.

Sıkça Sorulan Sorular

“AES Simetrik Şifreleme” dersi ücretsiz mi?

Evet — “AES Simetrik Şifreleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“AES Simetrik Şifreleme” dersinde ne öğreneceğim?

Hassas verileri Java'nın javax.crypto API'sini kullanarak AES/CBC/PKCS5Padding ile şifreleyin ve şifrelerini çözün. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“AES Simetrik Şifreleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. MessageDigest ile Şifreleme Özeti Oluşturma
  2. AES Simetrik Şifreleme
  3. İleti Bütünlüğü için HMAC-SHA256
  4. JWT: Yapı, Oluşturma ve Doğrulama
← Java Academy Sayfasına Dön