🔒 crypto - Kriptografi ve Şifreleme
Şifreleme, karma ve dijital imza işlemleri için kapsamlı kriptografi araçları
📦 101 Fonksiyon
📝 1381 Satır
💾 49 KB
📋 Genel Bakış
crypto modülü, modern kriptografi algoritmaları ile veri şifreleme, karma fonksiyonları, dijital imzalar ve güvenli anahtar yönetimi için kapsamlı araçlar sağlar. AES, RSA, SHA, HMAC ve daha fazlasını destekler.
🔐 Simetrik Şifreleme
- crypto.aes_şifrele() - AES şifreleme (128/192/256 bit)
- crypto.aes_çöz() - AES şifre çözme
- crypto.chacha20() - ChaCha20 akış şifrelemesi
- crypto.aes_gcm() - AES-GCM (kimlik doğrulamalı şifreleme)
🔑 Asimetrik Şifreleme
- crypto.rsa_anahtar_çifti_oluştur() - RSA anahtar çifti üretme
- crypto.rsa_şifrele() - RSA ile şifreleme
- crypto.rsa_çöz() - RSA ile şifre çözme
- crypto.ecc_anahtar_üret() - Eliptik eğri anahtarları
#️⃣ Karma Fonksiyonları
- crypto.sha256() - SHA-256 karma
- crypto.sha512() - SHA-512 karma
- crypto.sha3() - SHA-3 karma
- crypto.blake3() - BLAKE3 hızlı karma
- crypto.hmac() - HMAC mesaj kimlik doğrulama
✍️ Dijital İmzalar
- crypto.rsa_imzala() - RSA dijital imza
- crypto.rsa_doğrula() - RSA imza doğrulama
- crypto.ecdsa_imzala() - ECDSA imzalama
- crypto.ed25519_imzala() - Ed25519 imzalama
🔐 Parola Güvenliği
- crypto.parola_karma() - Güvenli parola karması (Argon2id)
- crypto.parola_doğrula() - Parola doğrulama
- crypto.pbkdf2() - PBKDF2 anahtar türetme
- crypto.bcrypt() - bcrypt parola karması
🎲 Güvenli Rastgelelik
- crypto.rastgele_bayt() - Kriptografik rastgele baytlar
- crypto.rastgele_tam() - Güvenli rastgele tam sayı
- crypto.uuid() - Rastgele UUID üretimi
💡 Kullanım Örnekleri
AES Şifreleme ve Şifre Çözme
kullan crypto
kullan encoding
// AES-256-GCM şifreleme (kimlik doğrulamalı)
değer mesaj = "Bu çok gizli bir mesajdır!"
değer anahtar = crypto.rastgele_bayt(32) // 256-bit anahtar
değer nonce = crypto.rastgele_bayt(12) // 96-bit nonce
yazdır("Orijinal mesaj: " + mesaj)
// Şifreleme
değer şifreli = crypto.aes_gcm_şifrele(
veri: mesaj.bayt(),
anahtar: anahtar,
nonce: nonce
)
değer şifreli_base64 = encoding.base64_kodla(şifreli)
yazdır(f"\nŞifreli (Base64): {şifreli_base64}")
// Şifre çözme
değer çözülmüş = crypto.aes_gcm_çöz(
veri: şifreli,
anahtar: anahtar,
nonce: nonce
).aç()
değer çözülmüş_metin = Dize.bayttan(çözülmüş)
yazdır(f"Çözülmüş mesaj: {çözülmüş_metin}")
// Anahtar ve nonce'ı güvenli sakla
yazdır(f"\nAnahtar (hex): {encoding.hex_kodla(anahtar)}")
yazdır(f"Nonce (hex): {encoding.hex_kodla(nonce)}")
RSA Asimetrik Şifreleme
kullan crypto
// RSA anahtar çifti oluşturma (2048-bit)
değer (açık_anahtar, özel_anahtar) = crypto.rsa_anahtar_çifti_oluştur(2048)
yazdır("RSA anahtar çifti oluşturuldu!")
// Açık anahtarla şifreleme
değer mesaj = "Gizli veriler: hesap bakiyesi = 10000 TL"
değer şifreli = crypto.rsa_şifrele(mesaj.bayt(), açık_anahtar)
yazdır(f"\nMesaj şifrelendi ({şifreli.uzunluk} bayt)")
// Özel anahtarla şifre çözme
değer çözülmüş = crypto.rsa_çöz(şifreli, özel_anahtar).aç()
değer çözülmüş_metin = Dize.bayttan(çözülmüş)
yazdır(f"Çözülmüş: {çözülmüş_metin}")
// Dijital imza oluşturma
değer imza = crypto.rsa_imzala(mesaj.bayt(), özel_anahtar)
yazdır(f"\nDijital imza oluşturuldu ({imza.uzunluk} bayt)")
// İmza doğrulama
değer geçerli = crypto.rsa_doğrula(mesaj.bayt(), imza, açık_anahtar)
eğer geçerli {
yazdır("✓ İmza geçerli!")
} yoksa {
yazdır("✗ İmza geçersiz!")
}
Güvenli Parola Yönetimi
kullan crypto
kullan time
sınıf ParolaYöneticisi {
değer parola_karmaları: Sözlük<Dize, Dize>
fonksiyon yeni() -> ParolaYöneticisi {
dön ParolaYöneticisi {
parola_karmaları: {}
}
}
fonksiyon kullanıcı_ekle(kullanıcı_adı: Dize, parola: Dize) -> Sonuç<Boş, Hata> {
// Parola gücünü kontrol et
eğer parola.uzunluk < 8 {
dön Hata("Parola en az 8 karakter olmalı")
}
// Argon2id ile güvenli karma oluştur
değer başlangıç = time.şimdi()
değer karma = crypto.parola_karma(parola, maliyet: 15)
değer süre = time.şimdi() - başlangıç
bu.parola_karmaları[kullanıcı_adı] = karma
yazdır(f"Parola karması oluşturuldu ({süre.milisaniye}ms)")
dön Tamam(boş)
}
fonksiyon giriş_yap(kullanıcı_adı: Dize, parola: Dize) -> Mantıksal {
eğer kullanıcı_adı !içinde bu.parola_karmaları {
dön yanlış
}
değer karma = bu.parola_karmaları[kullanıcı_adı]
değer başlangıç = time.şimdi()
değer geçerli = crypto.parola_doğrula(parola, karma)
değer süre = time.şimdi() - başlangıç
yazdır(f"Parola doğrulama: {süre.milisaniye}ms")
dön geçerli
}
}
// Kullanım
değer yönetici = ParolaYöneticisi.yeni()
// Kullanıcı ekleme
yönetici.kullanıcı_ekle("ahmet", "Güçlü_P@rol@_123").aç()
yönetici.kullanıcı_ekle("ayşe", "Başka_Güçlü_P@ss").aç()
// Giriş denemeleri
yazdır("\n--- Giriş Denemeleri ---")
eğer yönetici.giriş_yap("ahmet", "Güçlü_P@rol@_123") {
yazdır("✓ Ahmet başarıyla giriş yaptı")
} yoksa {
yazdır("✗ Giriş başarısız")
}
eğer yönetici.giriş_yap("ahmet", "yanlış_parola") {
yazdır("✓ Giriş başarılı")
} yoksa {
yazdır("✗ Yanlış parola!")
}
Dosya Şifreleme Sistemi
kullan crypto
kullan fs
kullan encoding
sınıf DosyaŞifreleyici {
fonksiyon dosya_şifrele(
kaynak: Dize,
hedef: Dize,
parola: Dize
) -> Sonuç<Boş, Hata> {
// Dosyayı oku
değer içerik = fs.dosya_oku(kaynak)?
// Parola'dan anahtar türet
değer tuz = crypto.rastgele_bayt(16)
değer anahtar = crypto.pbkdf2(
parola.bayt(),
tuz,
iterasyon: 100000,
uzunluk: 32
)
// Şifreleme için nonce oluştur
değer nonce = crypto.rastgele_bayt(12)
// AES-GCM ile şifrele
değer şifreli = crypto.aes_gcm_şifrele(
veri: içerik,
anahtar: anahtar,
nonce: nonce
)
// Dosya formatı: [TUZ:16][NONCE:12][ŞİFRELİ_VERİ]
değer çıktı = tuz + nonce + şifreli
fs.dosya_yaz(hedef, çıktı)?
yazdır(f"✓ Dosya şifrelendi: {kaynak} -> {hedef}")
yazdır(f" Boyut: {içerik.uzunluk} -> {çıktı.uzunluk} bayt")
dön Tamam(boş)
}
fonksiyon dosya_çöz(
kaynak: Dize,
hedef: Dize,
parola: Dize
) -> Sonuç<Boş, Hata> {
// Şifreli dosyayı oku
değer veri = fs.dosya_oku(kaynak)?
// Tuz ve nonce'ı ayıkla
değer tuz = veri[0..16]
değer nonce = veri[16..28]
değer şifreli = veri[28..]
// Parola'dan anahtar türet
değer anahtar = crypto.pbkdf2(
parola.bayt(),
tuz,
iterasyon: 100000,
uzunluk: 32
)
// Şifreyi çöz
değer içerik = crypto.aes_gcm_çöz(
veri: şifreli,
anahtar: anahtar,
nonce: nonce
)?
// Dosyaya yaz
fs.dosya_yaz(hedef, içerik)?
yazdır(f"✓ Dosya çözüldü: {kaynak} -> {hedef}")
yazdır(f" Boyut: {veri.uzunluk} -> {içerik.uzunluk} bayt")
dön Tamam(boş)
}
}
// Kullanım
değer şifreleyici = DosyaŞifreleyici {}
// Dosya şifreleme
şifreleyici.dosya_şifrele(
"gizli_belgeler.pdf",
"gizli_belgeler.pdf.enc",
"çok_güçlü_parola_123"
).aç()
// Dosya çözme
şifreleyici.dosya_çöz(
"gizli_belgeler.pdf.enc",
"gizli_belgeler_çözülmüş.pdf",
"çok_güçlü_parola_123"
).aç()
🎯 İyi Uygulamalar
- Asla özel anahtarları veya parolaları sabit kodlamayın
- Kimlik doğrulamalı şifreleme için AES-GCM kullanın
- Parola karması için Argon2id veya bcrypt tercih edin
- Rastgele sayı üretimi için
crypto.rastgele_bayt()kullanın - RSA için en az 2048-bit anahtar boyutu kullanın
- Anahtarları güvenli anahtar yönetim sistemlerinde saklayın
- Düzenli olarak anahtarları döndürün
- Eski kriptografi algoritmalarından (MD5, SHA1, DES) kaçının
⚠️ Güvenlik Uyarıları
- 🔴 Özel anahtarları asla paylaşmayın veya kaynak koduna eklemeyin
- 🔴 Parola veya anahtar üretiminde standart
randomkullanmayın - 🔴 Şifreli verileri değiştirme saldırılarına karşı HMAC veya GCM kullanın
- 🔴 Hassas verileri bellekte tutarken dikkatli olun (bellek dökümleri)