iOS UUID配合keychain的替换方案实现 - Herooic
来源:互联网 发布:淘宝飞猪客服电话 编辑:程序博客网 时间:2024/05/24 05:38
参考:http://blog.csdn.net/u011439689/article/details/18707387
iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个iOS程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用。
在应用里使用使用keyChain,我们需要导入Security.framework
要先声明公共区的名称,官方文档管这个名称叫“keychain access group”,声明的方法是新建一个plist文件,名字随便起,内容如下:
“yourAppID.com.yourCompany.whatever”就是你要起的公共区名称
获取UUID 并保存到keychain中:
#pragma mark--获取设备UUID-(NSString*) uuid { if ([CHKeychain load:UUIDKEY]) { NSString *result = [CHKeychain load:UUIDKEY]; return result; } else { CFUUIDRef puuid = CFUUIDCreate( nil ); CFStringRef uuidString = CFUUIDCreateString( nil, puuid ); NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString); CFRelease(puuid); CFRelease(uuidString); [CHKeychain save:UUIDKEY data:result]; return [result autorelease]; } return nil;}
CHKeychain 的实现代码(需要导入Security.framework):
CHKeychain.h
#import <Foundation/Foundation.h>@interface CHKeychain : NSObject+ (void)save:(NSString *)service data:(id)data;+ (id)load:(NSString *)service;+ (void)deleteData:(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
0 0
- iOS UUID配合keychain的替换方案实现 - Herooic
- iOS UUID配合keychain的替换方案实现
- IOS开发-iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现【转】
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- iOS小技巧-使用UUID+keychain替代udid方案
- iOS----KeyChain保存uuid
- iOS UUID +Keychain 存储
- hello.c内核模块编译 -- linux内核
- 【BZOJ】【P1532】【POI2005】【Kos-Dicing】【二分+最大流】
- C和C++中存储区域详解(栈、堆、全局...)
- Mysql备份恢复相关
- Xcode如何管理工程?就是分好几个文件夹,分类管理,可是原文件目录还是一大堆
- iOS UUID配合keychain的替换方案实现 - Herooic
- VS不能设置断点
- 53个要点提高PHP编程效率.
- Android Native Signal机制
- 重定向编程 dup和dup2函数
- Winform简单的增删改
- Python宝典第四章:可复用的函数与模块
- CAS实现SSO单点登录原理
- Hbase rowkey的设计 与 优化