Dataskydd och kryptering
Skydda filer och lär dig grunderna i CryptoKit.
Dataskydd och kryptering är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.
Dataskydd i iOS
iOS krypterar som standard filer på lagringsenheten, men du kan välja när filernas innehåll kan dekrypteras med hjälp av klasser för Data Protection. De kopplar filåtkomst till enhetens låstillstånd, ungefär som Keychains tillgänglighetsklasser gör för hemligheter.
import Foundation
// File-level protection ties decryption to lock state.
// Set a protection class when writing sensitive files.Skyddsklasserna
De viktigaste skyddsnivåerna för filer är .complete (oläsbar när enheten är låst), .completeUnlessOpen (förblir läsbar om filen redan var öppen när enheten låstes), .completeUntilFirstUserAuthentication (läsbar efter den första upplåsningen) och .none.
import Foundation
// FileProtectionType:
// .complete
// .completeUnlessOpen
// .completeUntilFirstUserAuthentication (default)
// .none
let level = FileProtectionType.complete
_ = levelSkriva en skyddad fil
Ange .completeFileProtection i skrivalternativen för att markera en fil som fullt skyddad. När enheten är låst gör operativsystemet filens innehåll otillgängligt, även för din egen app.
import Foundation
func writeSecure(_ data: Data, to url: URL) throws {
try data.write(
to: url,
options: [.completeFileProtection])
}Ange skydd för befintliga filer
Du kan ändra en fils skydd efter att den har skapats genom att ange attributet FileAttributeKey.protectionKey via FileManager. Det är praktiskt när du vill förstärka skyddet för filer som du tar emot eller migrerar.
import Foundation
func protect(_ url: URL) throws {
try FileManager.default.setAttributes(
[.protectionKey: FileProtectionType.complete],
ofItemAtPath: url.path)
}CryptoKit för kryptering i appen
När du själv behöver kryptera data – före uppladdning eller för att lägga till ett skyddslager ovanpå diskkrypteringen – använder du CryptoKit. Det tillhandahåller moderna, svåranvända-på-fel-sätt-primitiver med säkra standardvärden och utan manuell hantering av IV-värden för AEAD-chiffer.
import CryptoKit
// CryptoKit offers hashing, symmetric & public-key
// crypto with safe, hard-to-misuse APIs.Hashning med SHA-256
För integritetskontroller och fingeravtryck producerar SHA256 ett digest med fast storlek. Observera att hashning är envägs och inte ersätter kryptering – hasha aldrig ett lösenord utan salt och en långsam KDF.
import CryptoKit
import Foundation
func fingerprint(_ data: Data) -> String {
let digest = SHA256.hash(data: data)
return digest.map { String(format: "%02x", $0) }
.joined()
}Symmetriska nycklar
Symmetrisk kryptering använder en gemensam nyckel. SymmetricKey(size: .bits256) genererar en stark, slumpmässig nyckel. Lagra nyckeln i Keychain – aldrig tillsammans med den chiffertext som den skyddar.
import CryptoKit
let key = SymmetricKey(size: .bits256)
// Persist this key in the Keychain, not in a file.
_ = keyKryptera med AES-GCM
AES.GCM är autentiserad kryptering: den både krypterar och upptäcker manipulering. seal returnerar en förseglad behållare som innehåller chiffertexten, nonce och autentiseringstaggen samlade.
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
}Dekryptera och verifiera
För att dekryptera återskapar du en SealedBox från de kombinerade data och anropar open. Om chiffertexten eller taggen har ändrats kastar open ett fel – autentiseringstaggen garanterar integriteten, så skadade data dekrypteras aldrig obemärkt.
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)
}Härleda nycklar från lösenord
Använd aldrig ett rått lösenord som nyckel. Härled en nyckel med HKDF (för indata med hög entropi) eller en lösenordsbaserad KDF. CryptoKits HKDF bearbetar och saltar nyckelmaterial till en korrekt symmetrisk nyckel.
import CryptoKit
import Foundation
func deriveKey(from secret: Data, salt: Data)
-> SymmetricKey {
return HKDF<SHA256>.deriveKey(
inputKeyMaterial: SymmetricKey(data: secret),
salt: salt,
outputByteCount: 32)
}Lägga flera skyddslager
Säkra appar kombinerar flera lager: Data Protection krypterar filer i vila och kopplar skyddet till låstillståndet, Keychain skyddar nycklar bakom biometrisk autentisering och CryptoKit lägger till kryptering på appnivå för data under överföring eller i molnet. Varje lager har ett säkert felbeteende på egen hand.
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"
_ = layersSnabb kontroll
Kom ihåg varför AES-GCM föredras för kryptering på appnivå.
Sammanfattning
Du har lärt dig om dataskydd och kryptering:
- Klasserna för filens Data Protection (
.complete,.completeUntilFirstUserAuthentication) kopplar dekryptering av disken till låstillståndet. - CryptoKit tillhandahåller hashning med SHA-256, generering av
SymmetricKeyoch autentiserad AES-GCM-kryptering viaseal/open. - Härled nycklar med HKDF och lagra nycklarna i Keychain, aldrig bredvid chiffertexten.
- Använd Data Protection, Keychain och CryptoKit i flera lager för ett djupgående försvar.
Lär dig Swift med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 122
- Lektioner
- 409
Vanliga frågor
Är lektionen ”Dataskydd och kryptering” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Dataskydd och kryptering”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Dataskydd och kryptering”?
Skydda filer och lär dig grunderna i CryptoKit. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Swift Academy?
Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Dataskydd och kryptering”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Swift Academy-lektionen?
Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Lagra hemligheter i Keychain
- Åtkomstkontroll för Keychain
- Biometrisk autentisering
- Dataskydd och kryptering