keychain存取用户名和密码

iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式。每个ios程序都有一个独立的keychain存储。请点击我

苹果已经有现成的类封装好了keychain,KeychainItemWrapper.h和KeychainItemWrapper.m文件,可以在GenericKeychain实例里找到。

简写的类:

CHKeychain.h

    #import <Foundation/Foundation.h>  
    #import <Security/Security.h>  
      
      
    @interface CHKeychain : NSObject  
      
    + (void)save:(NSString *)service data:(id)data;  
    + (id)load:(NSString *)service;  
    + (void)delete:(NSString *)service;  
      
      
    @end

CHKeychain.m

    #import "CHKeychain.h"  
      
    @implementation CHKeychain  
    + (NSMutableDictionary *)getKeychainQuery:(NSString *)service {  
        return [NSMutableDictionary dictionaryWithObjectsAndKeys:  
                (id)kSecClassGenericPassword,(id)kSecClass,  
                service, (id)kSecAttrService,  
                service, (id)kSecAttrAccount,  
                (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,  
                nil];  
    }  
      
    + (void)save:(NSString *)service data:(id)data {  
        //Get search dictionary  
        NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];  
        //Delete old item before add new item  
        SecItemDelete((CFDictionaryRef)keychainQuery);  
        //Add new object to search dictionary(Attention:the data format)  
        [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData];  
        //Add item to keychain with the search dictionary  
        SecItemAdd((CFDictionaryRef)keychainQuery, NULL);  
    }  
      
    + (id)load:(NSString *)service {  
        id ret = nil;  
        NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];  
        //Configure the search setting  
        //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue  
        [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];  
        [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];  
        CFDataRef keyData = NULL;  
        if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {  
            @try {  
                ret = [NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)keyData];  
            } @catch (NSException *e) {  
                NSLog(@"Unarchive of %@ failed: %@", service, e);  
            } @finally {  
    }  
        }  
        if (keyData)   
        CFRelease(keyData);  
        return ret;  
    }  
      
    + (void)delete:(NSString *)service {  
        NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];  
        SecItemDelete((CFDictionaryRef)keychainQuery);  
    }  
      
      
    @end  

引入头文件

#import "CHKeychain.h"

首先需要定义几个字符串用来做key

NSString * const KEY_USERNAME_PASSWORD = @"com.company.app.usernamepassword";
NSString * const KEY_USERNAME = @"com.company.app.username";
NSString * const KEY_PASSWORD = @"com.company.app.password";


gwh.com.key保存目录iPhone Simulator/6.0/Applications/文件编码/Library/Caches


四个按钮的方法

字符串比较必须使用isEqualToString

-(IBAction)save:(id)sender
{
    NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionary];
    [usernamepasswordKVPairs setObject:_txtfldUsername.text forKey:KEY_USERNAME];
    [usernamepasswordKVPairs setObject:_txtfldPassword.text forKey:KEY_PASSWORD];
    [CHKeychain save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs];  }

-(IBAction)get:(id)sender
{
    NSMutableDictionary *usernamepasswordKVPairs = (NSMutableDictionary *)[CHKeychain load:KEY_USERNAME_PASSWORD];
    [_label setText:[NSString stringWithFormat:@"%@_%@",[usernamepasswordKVPairs objectForKey:KEY_USERNAME],[usernamepasswordKVPairs objectForKey:KEY_PASSWORD]]];
}

-(IBAction)delet:(id)sender
{
    [CHKeychain delete:KEY_USERNAME_PASSWORD];
}

-(IBAction)enter:(id)sender
{
    NSMutableDictionary *usernamepasswordKVPairs = (NSMutableDictionary *)[CHKeychain load:KEY_USERNAME_PASSWORD];
    if ([_txtfldPassword.text isEqualToString:[usernamepasswordKVPairs objectForKey:KEY_PASSWORD]]) {
        NSLog(@"success");
    }else{
        NSLog(@"fail");
    }
}
demo下载http://download.csdn.net/download/gwh111/4982044

参考http://blog.csdn.net/bl1988530/article/details/6887946
跳到我了吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值