Perlindungan Data dan Enkripsi
Lindungi file dan pelajari dasar-dasar CryptoKit.
Perlindungan Data dan Enkripsi adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Perlindungan Data di iOS
iOS mengenkripsi berkas di penyimpanan secara bawaan, tetapi Anda dapat memilih kapan isi berkas dapat didekripsi menggunakan kelas Perlindungan Data. Kelas-kelas ini mengaitkan akses berkas dengan status penguncian perangkat, seperti halnya kelas aksesibilitas Rantai Kunci untuk rahasia.
import Foundation
// File-level protection ties decryption to lock state.
// Set a protection class when writing sensitive files.Kelas Perlindungan
Tingkat perlindungan berkas utama adalah .complete (tidak dapat dibaca saat terkunci), .completeUnlessOpen (tetap dapat dibaca jika sudah terbuka saat perangkat dikunci), .completeUntilFirstUserAuthentication (dapat dibaca setelah pembukaan kunci pertama), dan .none.
import Foundation
// FileProtectionType:
// .complete
// .completeUnlessOpen
// .completeUntilFirstUserAuthentication (default)
// .none
let level = FileProtectionType.complete
_ = levelMenulis Berkas yang Dilindungi
Berikan .completeFileProtection dalam opsi penulisan untuk menandai berkas sebagai terlindungi sepenuhnya. Saat perangkat terkunci, OS membuat isinya tidak dapat diakses bahkan oleh aplikasi Anda sendiri.
import Foundation
func writeSecure(_ data: Data, to url: URL) throws {
try data.write(
to: url,
options: [.completeFileProtection])
}Mengatur Perlindungan pada Berkas yang Ada
Anda dapat mengubah perlindungan berkas setelah dibuat dengan menetapkan atribut FileAttributeKey.protectionKey melalui FileManager. Ini berguna untuk memperketat perlindungan pada berkas yang Anda terima atau pindahkan.
import Foundation
func protect(_ url: URL) throws {
try FileManager.default.setAttributes(
[.protectionKey: FileProtectionType.complete],
ofItemAtPath: url.path)
}CryptoKit untuk Enkripsi Dalam Aplikasi
Saat Anda perlu mengenkripsi data sendiri — sebelum mengunggahnya atau untuk menambahkan lapisan di atas perlindungan penyimpanan — gunakan CryptoKit. CryptoKit menyediakan primitif modern yang tahan terhadap penyalahgunaan, dengan bawaan yang aman dan tanpa perlu mengelola vektor inisialisasi secara manual untuk penyandi AEAD.
import CryptoKit
// CryptoKit offers hashing, symmetric & public-key
// crypto with safe, hard-to-misuse APIs.Pencincangan dengan SHA-256
Untuk pemeriksaan integritas dan sidik jari, SHA256 menghasilkan intisari berukuran tetap. Perhatikan bahwa pencincangan bersifat satu arah dan bukan pengganti enkripsi — jangan pernah mencincang kata sandi tanpa garam dan KDF yang lambat.
import CryptoKit
import Foundation
func fingerprint(_ data: Data) -> String {
let digest = SHA256.hash(data: data)
return digest.map { String(format: "%02x", $0) }
.joined()
}Kunci Simetris
Enkripsi simetris menggunakan satu kunci bersama. SymmetricKey(size: .bits256) menghasilkan kunci acak yang kuat. Simpan kunci tersebut di Rantai Kunci — jangan pernah menyimpannya bersama teks tersandi yang dilindunginya.
import CryptoKit
let key = SymmetricKey(size: .bits256)
// Persist this key in the Keychain, not in a file.
_ = keyMengenkripsi dengan AES-GCM
AES.GCM adalah enkripsi terautentikasi: selain mengenkripsi, metode ini juga mendeteksi perubahan yang tidak sah. seal mengembalikan kotak tersegel yang berisi teks tersandi, nilai sekali pakai, dan penanda autentikasi dalam satu paket.
import CryptoKit
import Foundation
func encrypt(_ data: Data, key: SymmetricKey)
throws -> Data {
let sealed = try AES.GCM.seal(data, using: key)
return sealed.combined! // nonce + ciphertext + tag
}Mendekripsi dan Memverifikasi
Untuk mendekripsi, buat kembali SealedBox dari data gabungan, lalu panggil open. Jika teks tersandi atau penanda diubah, open akan melemparkan galat — penanda autentikasi menjamin integritas, sehingga data yang rusak tidak pernah didekripsi tanpa pemberitahuan.
import CryptoKit
import Foundation
func decrypt(_ combined: Data, key: SymmetricKey)
throws -> Data {
let box = try AES.GCM.SealedBox(combined: combined)
return try AES.GCM.open(box, using: key)
}Menurunkan Kunci dari Kata Sandi
Jangan pernah menggunakan kata sandi mentah sebagai kunci. Turunkan kunci dengan HKDF untuk masukan berentropi tinggi atau dengan KDF berbasis kata sandi. HKDF menjalankan peregangan dan penambahan garam pada bahan kunci menjadi kunci simetris yang sesuai.
import CryptoKit
import Foundation
func deriveKey(from secret: Data, salt: Data)
-> SymmetricKey {
return HKDF<SHA256>.deriveKey(
inputKeyMaterial: SymmetricKey(data: secret),
salt: salt,
outputByteCount: 32)
}Melapiskan Pertahanan
Aplikasi yang aman menggabungkan beberapa lapisan: Perlindungan Data mengenkripsi berkas saat tersimpan dan mengaitkannya dengan status penguncian, Rantai Kunci menjaga kunci di balik biometrik, dan CryptoKit menambahkan enkripsi tingkat aplikasi untuk data yang sedang dikirim atau berada di awan. Setiap lapisan tetap gagal dengan aman jika berdiri sendiri.
import CryptoKit
import Foundation
// 1. Key lives in Keychain (biometric-gated)
// 2. Plaintext file written with .completeFileProtection
// 3. Uploads encrypted with AES.GCM before leaving device
let layers = "defense in depth"
_ = layersPemeriksaan Singkat
Ingat kembali alasan AES-GCM lebih disukai untuk enkripsi tingkat aplikasi.
Ringkasan
Anda telah mempelajari perlindungan data dan enkripsi:
- Kelas Perlindungan Data untuk berkas (
.complete,.completeUntilFirstUserAuthentication) mengaitkan dekripsi disk dengan status terkunci. - CryptoKit menyediakan hashing SHA-256, pembuatan
SymmetricKey, serta enkripsi terautentikasi AES-GCM melaluiseal/open. - Turunkan kunci dengan HKDF; simpan kunci di Rantai Kunci, jangan pernah menyimpannya di sebelah teks tersandi.
- Gabungkan Perlindungan Data, Rantai Kunci, dan CryptoKit untuk pertahanan berlapis.
Belajar Swift dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Perlindungan Data dan Enkripsi” gratis?
Ya — teks lengkap “Perlindungan Data dan Enkripsi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Perlindungan Data dan Enkripsi”?
Lindungi file dan pelajari dasar-dasar CryptoKit. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Perlindungan Data dan Enkripsi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyimpan Rahasia di Keychain
- Pengendalian Akses Keychain
- Autentikasi Biometrik
- Perlindungan Data dan Enkripsi