1. keychain概述
1.1 keychain是什么
苹果官网对钥匙串的描述
iOS keychain 是一个相对独立的空间,是用SQLite进行存储的,可以加密我们保存的数据,并且使用keychain service API增删改查。
keychain的是以item为单位存储的。data是数据本身,attributes就是数据库中的键。
1.2 keychain的优点
相对于NSUserDefaults、plist文件保存等一般方式,keychain有以下优点
-
keychain钥匙串中的信息不会因为卸载/重装app而丢失
-
keychain保存更为安全
1.3 keychain的用途
-
保存密码、证书、设备唯一码
-
历史数据
例子:keychain保存did和登录历史数据。
keychain适合保存一些比较小的数据量的数据,如果要保存大的数据,可以考虑文件的形式存储在磁盘上,在keychain里面保存解密这个文件的密钥。
2. keychain的基本使用
2.1 keychain item 的类型和主键
kSecClass可以有以下取值
-
kSecClassGenericPassword //普通密码
-
kSecClassInternetPassword //互联网密码
-
kSecClassCertificate//证书
-
kSecClassKey//加密的内容
-
kSecClassIdentity //身份相关的
每种类型的Keychain item都有不同的键作为主要的Key也就是唯一标示符用于搜索,更新和删除
类型为GenericPassword的item必须使用kSecAttrAccount和kSecAttrService作为主要的key
item类型 | 可指定的attributes |
kSecClassInternetPassword | kSecAttrAccess (OS X only) kSecAttrAccessControl kSecAttrAccessGroup (iOS; also OS X if kSecAttrSynchronizable and/or kSecUseDataProtectionKeychain set) kSecAttrAccessible (iOS; also OS X if kSecAttrSynchronizable and/or kSecUseDataProtectionKeychain set) kSecAttrCreationDate kSecAttrModificationDate kSecAttrDescription kSecAttrComment kSecAttrCreator kSecAttrType kSecAttrLabel kSecAttrIsInvisible kSecAttrIsNegative kSecAttrAccount kSecAttrSecurityDomain kSecAttrServer kSecAttrProtocol kSecAttrAuthenticationType kSecAttrPort kSecAttrPath kSecAttrSynchronizable < |