重新安装应用程序后,钥匙串存储的密码仍然可用
keychain stored password is still available after app re-installed
我正在使用 xcode8+swift3 开发 iOS 应用程序。
我创建了将用户密码存储到钥匙串并从钥匙串中读取密码的函数。我创建的函数可以参考
我通常注意到的问题是,即使我卸载了应用程序,当我重新安装应用程序时,我的应用程序从钥匙串读取的密码是以前安装的应用程序(已经卸载)的旧密码。
我的问题是,解决这个问题的最佳做法是什么?
在 app delegate 中你可以做:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL savedInKeychain = [[NSUserDefaults standardUserDefaults]boolForKey:@"savedInKeychain"];
if(!savedInKeychain){
//There is no keychian data saved in this app
//check if data exisst in keychain
if(kechainData){
//Delete keychain data
}
return YES;
}
稍后在钥匙串中保存数据后,在 userdefaults 中将 savedInKeychain 设置为 YES。
钥匙串已加密并在卸载后永久保留。
NSUserdefaults 未加密(不建议存储密码)并且在卸载后不持久。
要检查应用程序是否首次启动并重置钥匙串,您可以使用此方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
// reset keychain
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}
我正在使用 xcode8+swift3 开发 iOS 应用程序。
我创建了将用户密码存储到钥匙串并从钥匙串中读取密码的函数。我创建的函数可以参考
我通常注意到的问题是,即使我卸载了应用程序,当我重新安装应用程序时,我的应用程序从钥匙串读取的密码是以前安装的应用程序(已经卸载)的旧密码。
我的问题是,解决这个问题的最佳做法是什么?
在 app delegate 中你可以做:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
BOOL savedInKeychain = [[NSUserDefaults standardUserDefaults]boolForKey:@"savedInKeychain"];
if(!savedInKeychain){
//There is no keychian data saved in this app
//check if data exisst in keychain
if(kechainData){
//Delete keychain data
}
return YES;
}
稍后在钥匙串中保存数据后,在 userdefaults 中将 savedInKeychain 设置为 YES。
钥匙串已加密并在卸载后永久保留。 NSUserdefaults 未加密(不建议存储密码)并且在卸载后不持久。
要检查应用程序是否首次启动并重置钥匙串,您可以使用此方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
// reset keychain
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}