iOS程序猿之keyChain保存登录名和密码

iOS程序猿之chart图表(PNChart) Chart图表 在开发中,特别是销售企业内部使用的APP,可能会用到数据汇总,使用到chart图表的功能! 在github上找到一个比较全,界面很漂亮的图表第三方:PNChart,它包含LineChart(折线图),BarChar(柱状图),CircleChart(圆圈进度图),PieChart(饼图),ScatterChart(点状分布图),Radar Chart(无线电图) 阅读详情

keyChain保存用户名和密码

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

下面贴上自己封装的keyChain保存用户登录名和密码的代码:
WQKeyChain.h

#import <Foundation/Foundation.h>

@interface WQKeyChain : NSObject

/**
 *  保存数据
 *
 *  @param service 标识符; eg: @"com.公司名.app.allInfo"
 *  @param data    保存的数据; eg:保存账号密码时,该参数可以是一个包含用户名和密码的字典
 */
+ (void)saveWithServie:(NSString *)service data:(id)data;

/**
 *  根据标示符读取保存的数据
 *
 *  @param service 标识符;
 *
 *  @return 返回保存的数据;
 */
+ (id)loadDataWithService:(NSString *)service;

/**
 *  根据标识符删除保存的数据
 *
 *  @param service 标识符;
 */
+ (void)deleteDataWithService:(NSString *)service;

@end

WQKeyChain.m
#import "WQKeyChain.h"

@implementation WQKeyChain

// 保存数据
+ (void)saveWithServie:(NSString *)service data:(id)data
{
    // 1.先根据标识符获取keyChainQuery
    NSMutableDictionary *keyChainQuery = [self getKeychainQuery:service];
    // 2.删除旧数据
    SecItemDelete((__bridge_retained CFDictionaryRef)keyChainQuery);
    // 3.添加新数据
    [keyChainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:((__bridge_transfer id)kSecValueData)];
    // 添加keyChainQuery到keychain
    SecItemAdd((__bridge_retained CFDictionaryRef)keyChainQuery, NULL);
}

// 根据标示符读取保存的数据
+ (id)loadDataWithService:(NSString *)service
{
    id returnData = nil;
    // 1.先根据标识符获取keyChainQuery
    NSMutableDictionary *keyChainQuery = [self getKeychainQuery:service];
    // 2. 配置keyChainQuery的设置
    [keyChainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge_transfer id)kSecReturnData];
    [keyChainQuery setObject:(__bridge_transfer id)kSecMatchLimitOne forKey:(__bridge_transfer id)kSecMatchLimit];
    CFDataRef keyData = nil;
    if (SecItemCopyMatching((__bridge_retained CFDictionaryRef)keyChainQuery, (CFTypeRef *)&keyData) == noErr) {
        @try {
            returnData = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge_transfer NSData *)keyData];
        }
        @catch (NSException *exception) {
            NSLog(@"Unarchive of %@ failed: %@", service, exception);
        }
        @finally {
        }
    }
    return returnData;
}

// 根据标识符删除保存的数据
+ (void)deleteDataWithService:(NSString *)service
{
    // 1.先根据标识符获取keyChainQuery
    NSMutableDictionary *keyChainQuery = [self getKeychainQuery:service];
    // 2.删除
    SecItemDelete((__bridge_retained CFDictionaryRef)keyChainQuery);
}

#pragma mark - private 私有方法
// 从keyChain根据标识符获取keyChainQuery
+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:(__bridge_transfer id)kSecClassGenericPassword,(__bridge_transfer id)kSecClass,service, (__bridge_transfer id)kSecAttrService,service, (__bridge_transfer id)kSecAttrAccount,(__bridge_transfer id)kSecAttrAccessibleAfterFirstUnlock,(__bridge_transfer id)kSecAttrAccessible,nil];
    return dictionary;
}

@end

用户管理类

UserDataManager.h
#import <Foundation/Foundation.h>

@interface UserDataManager : NSObject

/**
 *  保存用户信息
 *
 *  @param userName 用户名
 *  @param password 密码
 */
+ (void)saveUserInfoWithUserName:(NSString *)userName password:(NSString *)password;

/**
 *  读取用户名
 *
 *  @return 用户名字符串
 */
+ (NSString *)loadUserName;

/**
 *  读取密码
 *
 *  @return 密码字符串
 */
+ (NSString *)loadPassword;

/**
 *  删除用户信息
 */
+ (void)deleteUserInfo;

@end
UserDataManager.m
#import "UserDataManager.h"
#import "WQKeyChain.h"

@implementation UserDataManager

static NSString *const KEY_IN_KEYCHAIN = @"com.companyName.app.allinfo";
static NSString *const KEY_USERNAME = @"com.companyName.app.userName";
static NSString *const KEY_PASSWORD = @"com.companyName.app.password";

// 保存用户信息
+ (void)saveUserInfoWithUserName:(NSString *)userName password:(NSString *)password
{
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    [dic setObject:userName forKey:KEY_USERNAME];
    [dic setObject:password forKey:KEY_PASSWORD];
    [WQKeyChain saveWithServie:KEY_IN_KEYCHAIN data:dic];
}

// 读取用户名
+ (NSString *)loadUserName
{
    NSMutableDictionary *dic = [WQKeyChain loadDataWithService:KEY_IN_KEYCHAIN];
    return [dic objectForKey:KEY_USERNAME];
}

// 读取密码
+ (NSString *)loadPassword
{
    NSMutableDictionary *dic = [WQKeyChain loadDataWithService:KEY_IN_KEYCHAIN];
    return [dic objectForKey:KEY_PASSWORD];
}

// 删除用户信息
+ (void)deleteUserInfo
{
    [WQKeyChain deleteDataWithService:KEY_IN_KEYCHAIN];
}
@end

这里是对登录名和密码进行简单的本地存储,网上还有一些写的比较全的博客,这里附上链接:
点击打开链接

点击打开链接






iOS程序猿之OC项目引入Swift方法 OC项目引入Swift方法 在OC项目中,有可能会遇到需要引入Swift写的第三方库,下面整理下OC项目如何使用Swift库 1.在已有的OC工程中新建一个Swift文件,命名为Test.swift,会弹出提示,选择Create Bridging Header建立桥接文件,系统会建立“工程名-Bridging-Header.h” 阅读详情

相关推荐

深入解析fio Benchmark测试:从源码到实践

本文深入解析fio Benchmark测试工具,从入门指南到源码架构分析,详细介绍了其核心模块、关键数据结构和I/O处理机制。通过实战案例展示如何优化存储性能测试,包括内存对齐、多线程调优等技巧,帮助开发者充分利用fio进行精准的存储性能评估。

weixin_42563415的博客 208

iOS中Keychain保存用户名和密码

有用户就用用户名和密码,而现在的应用都少不了一个保存用户名和密码用于自动登录的功能,本文介绍使用iOS自带的Keychain方法保存用户名和密码。

Minecraft 1万+

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

钥匙串(Keychain)服务编程指南-iOS部分

介绍钥匙串服务提供了一种安全存储信息的方式,比如:密码,关键字,证书和一个或一些用户的数据. 一个用户只能通过一个密码解锁钥匙串,然后钥匙串会为其对应的应用存储和获取密码.下面会讨论经常被开发者使用的用于存储的数据结构和钥匙串如何为你服务.如果你需要处理以下的密码相关的问题,你需要这个文档: 多用户 – 比如:一个邮件或调度服务器需要认证许多用户 多服务器 – 比如:一个银行或保险的应用需要于多个数

dis的专栏 3414

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1136

C# ArcGIS Engine二次开发——实现“加载shp文件”

private void AddShpDataToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog OpFileDialog=new OpenFileDialog();//OpenFileDialog:打开文件对话框 OpFileDialog.Title="添加矢量数据"; OpFileDialog.Filter="(*.shp)|*.shp";//filter:过滤器;"(*.shp)|*.shp"

weixin_42191203的博客 5254

iOS 开发 -- 使用KeyChain保存用户名、密码并实现自动登录

KeyChain使用工具类: 一、前言 我的话,只是写了个keychain使用的工具类,让我们使用的时候可以直接调用接口,以求方便。 但是关于keychain的一些概念还有一些官方API我都不打算说的,当然你要看下面一些东西的话可能对keychain需要有一个大概的认识。 至少至少你需要知道keychain的这些个API操作都是需要基于一个字典的,我们把它叫做queryDict好了。

学海无涯苦作舟 3532

从X86到ARM:全面解析服务器CPU架构的演变与未来趋势

本文深入解析了服务器CPU架构从X86到ARM的演变历程与未来趋势。文章从CISC与RISC两种设计哲学切入,分析了X86凭借生态建立的帝国地位及其面临的功耗挑战,并重点阐述了ARM架构凭借其卓越的能效比优势,正从移动端向数据中心市场发起冲击。未来,异构计算、软硬协同与专用芯片将成为服务器CPU发展的核心方向。

gold的博客 1127

iOS开发——keychain的使用

通常情况下,我们用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。keychain里保存的信息不会因App被删除而丢失,在用户重新安装App后依然有效,数据还在。 使用苹果官方发布的KeychainItemWrapper或者SFHFKeychainUtils很方便,后来看到 iphone使用keychain来存取用户名和密...

mmdev 290

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 301

ElasticSearch集群搭建

docker安装es集群

weixin_46562226的博客 2025

iphone使用keychain来存取用户名和密码

iphone使用keychain来存取用户名和密码             以下文字转载自:http://blog.youkuaiyun.com/bl1988530/article/details/6887946,向原作者表示感谢和敬意。                 iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等

tangaowen的专栏 1440

基于深度学习方法(7种)的高光谱与多光谱图像融合(附代码+3个数据集获取)

其他不懂的可以把代码发给AI哦,让它给你解读。

热爱分享,热爱记录 1298

keychain service钥匙串服务

keychain service钥匙串服务是iOS提供的用于管理用户密码、密钥、证书、标识的服务,它相当于一个加密容器,app可以把相关的用户信息以钥匙条目的形式存储到其中,钥匙串服务会将所有存储到其中的条目进行加密,并保护起来,只允许创建这个条目的app访问它。app要把用户信息(钥匙)添加到钥匙串服务(钥匙串)中,在必要时从钥匙串服务中取出用户信息,这些动作需要用到Keychain Servic

ohyeahhhh的博客 3314

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iOS程序猿之AFNetworking 3.0 版本使用

AFNetworking 3.0 版本使用 在Xcode7.0之后,苹果废弃了NSURLConnection方法,数据请求使用NSURLSession,作为网络请求类第三方库使用量最大的AFN也及时的更新的新的版本——AFN 3.0版本。新的版本的里废弃了基于NSURLConnection封装的AFHTTPRequestOperationManager,转而使用基于NSURLSession封装的

iOS_wq的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

iOS程序猿之读取手机通讯录

读取手机通讯录 如今很多app都有读取手机联系人的需要,最近项目也遇到了类似的需求,这里整理下 从iOS开始,苹果废弃了以前复杂的AddressBookFramework,使用非常简单易用的Contacts Framework! 这里贴上两篇关于AddressBookFramework的博客,有兴趣的可以看看: http://my.oschina.net/u/2340880/blog/

iOS_wq的博客 6030

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

iOS程序猿之UIBezierPath类属性和方法(画图路径)

UIBezierPath UIBezierPath类可以定义一个由直线和曲线线段的路径,呈现在自定义视图上.可以定义简单的形状,如矩形,椭圆形,圆弧或者复杂多边形等.定义形状后,就可以使用这个类的其他方法来呈现当前当前绘制上下文的路径. 创建UIBezierPath对象 + bezierPath创建并返回一个新的UIBezierPath对象。 + bezie

iOS_wq的博客 5791

iOS程序猿之JSONKit的使用

JSONKit的使用 在项目经常会遇到解析json或者给后台传json格式的数据;而苹果自带的方法转换json时,每个字典的字段后面会有换行符,那么JSONKit可以是个不错的选择 JSONKit在git上的地址是:https://github.com/johnezang/JSONKit 1.准备工作 该项目已经很久没有更新了,目前还使用MRC,因此需要做几处修改: 在arc下使用,

iOS_wq的博客 5182

iOS程序猿之富文本(NSMuttableAttstring)

富文本(NSMuttableAttstring) 在iOS开发中,有时会需要将一段文字显示成不同大小,不同颜色的需求,我们可以借助NSAttstring和NSMuttaleAttstring来实现 NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:gradeString];

iOS_wq的博客 1692

iOS程序猿之iOS绘图基础(draw)

iOS绘图基础(draw) 先说几个基本概念: context:上下文,ios绘图的方法都需要传一个上下文context,这个context在重写uiview的drawRect的方法里调用UIGraphicsGetCurrentContext()获取 path:路径,ios绘图可以想象为你拿着一支笔去画图,画几条线或几个点从而形成一个路径,之后可以利用理解去填色或者描边 stroke,

iOS_wq的博客 1565

iOS程序猿之linux的cp/scp命令+scp命令详解

linux之cp/scp命令+scp命令详解  1.cp命令 名称:cp 使用权限:所有使用者 使用方式:       cp [options] source dest       cp [options] source... directory 说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。 -a 尽可能将档案状态、权限等资料都照原状予以复制。 -r 若

iOS_wq的博客 1038

iOS程序猿之CAShapeLayer类(动画)

CAShapeLayer 指定形状路径 @property CGPathRef path; // 动画路径,默认为NULL /** * 不像大多数动画的性能,path(与所有CGPathRef动画属性)不支持隐动画。 * 路径对象可以使用任何的具体子类的动画CAPropertyAnimation * 如果此属性的值是不为NULL,则path使用指定的路径,而不是创建该层的合成后

iOS_wq的博客 894

iOS程序猿之NSdate那些事

NSdate的那些事 这段时间的开发和NSDate打上交道了,在这里记录下.... 1.创建 NSDate *date = [NSDate date]; // 获取的是当前时间说说坑爹的事情: 这个日期信息在控制台打印是格林尼治时间,也就是比我大中华的北京时间晚8小时,但是在模拟器和真机上时是没有影响的!切记切记,不要再加8小时了!!! 2.控制台打印当前时区的时间信息(date

iOS_wq的博客 888

iOS程序猿之本地通知那些事

本地通知 先判断用户是否允许该软件接受通知 //如果已经获得发送通知的授权则创建本地通知,否则请求授权(注意:如果不请求授权在设置中是没有对应的通知设置项的,也就是说如果从来没有发送过请求,即使通过设置也打不开消息允许设置 if ([[UIApplication sharedApplication] currentUserNotificationSettings].types !=

iOS_wq的博客 800
上一篇: iOS程序猿之iOS绘图基础(draw)
下一篇: iOS程序猿之iOS动画基础
iOS_wq
博客等级 码龄11年 10粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值