Junior — Middle
Чӣ гуна бехатариро ҳангоми нигоҳдории маълумоти махфӣ таъмин мекунед?
sobes.tech AI
Ҷавоб аз AI
Барои таъмин кардани бехатарӣ ҳангоми нигоҳдории маълумоти махфӣ дар iOS, одатан истифода мешавад Keychain — захираи муҳофизатшуда, ки системаи таъмин мекунад. Keychain маълумотро рамзгузорӣ мекунад ва дастрасиро ба онҳо маҳдуд мекунад, ки ин пешгирии дастрасии ғайрирасмиро таъмин мекунад.
Илова бар ин, муҳим аст:
- Паролҳо ва сиррҳоро дар шакли ошкор дар UserDefaults ё файлҳо нигоҳ накунед.
- Вақте зарур аст, рамзгузориро истифода баред барои нигоҳдории маълумот берун аз Keychain.
- Дастрасиро ба маълумот тавассути танзимоти дастрасӣ ба Keychain маҳдуд кунед (масалан, танҳо вақте ки дастгоҳ боз аст).
Масалан, навиштан ва хондани сатр дар Keychain бо истифода аз Swift:
import Security
func saveToKeychain(value: String, forKey key: String) {
let data = value.data(using: .utf8)!
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecValueData as String: data
]
SecItemDelete(query as CFDictionary) // нест кардани сабти кӯҳна
SecItemAdd(query as CFDictionary, nil)
}
func loadFromKeychain(key: String) -> String? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecReturnData as String: true,
kSecMatchLimit as String: kSecMatchLimitOne
]
var dataTypeRef: AnyObject? = nil
let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)
if status == errSecSuccess, let data = dataTypeRef as? Data {
return String(data: data, encoding: .utf8)
}
return nil
}