使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。从ios 3。0开始,跨程序分享keychain变得可行。

如何需要在应用里使用使用keyChain,我们需要导入Security.framework ,keychain的操作接口声明在头文件SecItem.h里。直接使用SecItem.h里方法操作keychain,需要写的代码较为复杂,为减轻咱们程序员的开发,我们可以使用一些已经封装好了的工具类,下面我会简单介绍下我用过的两个工具类:KeychainItemWrapper和SFHFKeychainUtils。

KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用操作的封装类,在官网上下载了GenericKeychain项目后,只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷贝到我们项目,并导入Security.framework 。KeychainItemWrapper的用法:

[objc] view plaincopy

  1. /** 初始化一个保存用户帐号的KeychainItemWrapper */
  2. KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"
  3. accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];
  4. //保存帐号
  5. [wrapper setObject:@"<帐号>" forKey:(id)kSecAttrAccount];
  6. //保存密码
  7. [wrapper setObject:@"<帐号密码>" forKey:(id)kSecValueData];
  8. //从keychain里取出帐号密码
  9. NSString *password = [wrapper objectForKey:(id)kSecValueData];
  10. //清空设置
  11. [wrapper resetKeychainItem];

其中方法“- (void)setObject:(id)inObject forKey:(id)key;”里参数“forKey”的值应该是Security.framework 里头文件“SecItem.h”里定义好的key,用其他字符串做key程序会崩溃!

SFHFKeychainUtils是另一个封装了KeyChain简单操作的第三方类库,使用上比KeychainItemWrapper要简单点,SFHFKeychainUtils只提供了获取、保存和删除三个方法:

[objc] view plaincopy

  1. #import <UIKit/UIKit.h>
  2. @interface SFHFKeychainUtils : NSObject {
  3. }
  4. /** 从Keychain里获取用户密码
  5. *param username 用户名
  6. *param serviceName 服务名
  7. *return NSString 用户名对应的密码
  8. */
  9. + (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;
  10. /**
  11. *把用户的密码保存到Keychain里
  12. *@param username 用户名
  13. *@param password 要保存的密码
  14. *@param serviceName 本条keychains所属的服务(组)
  15. *return BOOL 是否存储成功
  16. */
  17. + (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;
  18. /**
  19. * 删除某个用户信息
  20. *param username 用户名
  21. *param serviceName 用户所属的服务(组)
  22. *return BOOL 是否删除成功
  23. */
  24. + (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;
  25. @end

使用方法:

[objc] view plaincopy

    1. #define ServiceName @"com.mycompany.yourAppServiceName"
    2. NSError *error;
    3. NSString *userName = @"<用户名>";
    4. NSString *password = @"<用户密码>";
    5. /** 保存用户的密码*/
    6. BOOL saved = [SFHFKeychainUtils storeUsername:userName
    7. andPassword:password
    8. forServiceName:ServiceName
    9. updateExisting:YES
    10. error:&error ];
    11. if (!saved) {
    12. NSLog(@"保存密码时出错:%@", error);
    13. }
    14. error = nil;
时间: 2024-08-05 08:31:49

使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。的相关文章

使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储.相对于 NSUserDefaults.文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在 重装App后,keychain里的数据还能使用.从ios 3.0开始,跨程序分享keychain变得可行. 如何需要在应用里使用使用keyChain,我们需要导入Security.framework ,key

iOS 使用Keychain 保存 用户名和密码到 本地

之前曾把一些简单的数据保存在了plist,文件,及NsuserDefault里面, 但是如果要保存密码之类的,保存在本地就很不安全了: 但是利用 Keychain 我们可以很安全的把 用户密码等信息保存在本地 1:使用苹果官方封装好的Keychain操作类 GenericKeychain 2:使用 开源的keychain操作 sskeychain #import <XCTest/XCTest.h> #import "SSKeychain.h" static NSString

iOS开发,使用keychain保存用户名密码

本文提供完整版demo,源码下载地址:GitHub Demo下载 KeyChain是苹果提供的一种安全的保存用户名.密码.证书的方式,将敏感信息保存在keychain中后,这些信息不会随着app的卸载而丢失,除非开发人员在app中手动删除敏感信息,否则,这些信息将会一直保存在keychain中. 在使用keychain时,我们首先要将security.framework引入到工程中.由于使用时不支持arc,所以我们在arc环境中需要针对相关文件启用mrc模式. 首先,我们构造一个工具类,通过这个

android 保存 用户名和密码 设置等应用信息优化

1.传统的保存用户名,密码方式 SharedPreferences Editor editor = shareReference.edit(); editor.putString(KEY_NAME,"username_value"); 通过这样的方法,能够基本满足需求,比如有用户名,那么就Editor.putString存放就好. 但是这样的方法有一些弊端: (1)在存放一些集合信息,存储ArrayList就不合适 (2)如果针对用户,新增加了很多熟悉,比如性别,头像等信息,那么需要一

Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》

之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导,声明实际开发中不会用到这两种方式,这里指示提供一种思路和给初学者学习简单的api. 由于内容和之前的基本一样,不做过多的解释.直接上代码: xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

Android保存用户名和密码

我们不管在开发一个项目或者使用别人的项目,都有用户登录功能,为了让用户的体验效果更好,我们通常会做一个功能,叫做保存用户,这样做的目地就是为了让用户下一次再使用该程序不会重新输入用户名和密码,这里我使用3种方式来存储用户名和密码 1.通过普通 的txt文本存储 2.通过properties属性文件进行存储 3.通过SharedPreferences工具类存储 第一种: /** * 保存用户名和密码的业务方法 * * @param username * @param password * @ret

IOS开发之----两种保存用户名和密码实现记住密码库

使用Keychain存储用户敏感信息 iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储.相对于 NSUserDefaults.文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在 重装App后,keychain里的数据还能使用.从ios 3.0开始,跨程序分享keychain变得可行. 如何需要在应用里使用使用keyChain,我们需要导入Secu

终于解决“Git Windows客户端保存用户名与密码”的问题

Git - How to use netrc file on windows - Stack Overflow 这就是正确答案,我们已经验证过了,下面详细描述一下解决方法: 1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图: 2. 在"开始>运行"中打开%Home%,新建一个名为"_netrc"的文件. 3. 用记事本打开_netrc文件,输入Git服务器名.用户名.密码,并保存.示例如下: machine git.cn

使用NSUserDefaults保存用户名和密码

创建一个user defaults方法有多个,最简单得快速创建方法: NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults]; 添加数据到 user defaults: [accountDefaults setObject:nameField.text forKey:UserDefaultNameKey]; 也可以添加基本数据类型int, float, bool等,有相应得方法 [accountDefault