iOS开发常用的加密技术

2023-11-02

iOS开发常用的加密技术

我胡汉三又回来了啦!时隔几月没有更博客了,我自己都受不鸟自己啦。在这几个月里经历了很多杂七杂八的事儿,不过话说回来,再怎么忙都不应该中断学习的步伐,再怎么忙都不能成为博客停更的理由。好吧就检讨到这里。开始进入正题 —>

一些常用的加密介绍

在iOS开发中(应该说在所有的开发中),数据的安全性都是非常重要的。下面就简单的说一下数据加密的一些方式。

MD2 、MD3、 MD4 、MD5 (MD6) Message-Digest Algorithm(信息-摘要算法),现在主要是MD5,前面的由于存在缺陷就被淘汰啦,而MD6的话现在还处于测试阶段。 具体的算法的更深层次的介绍请移步Google。

SHA1 、SHA224 、SHA256 、SHA384 、SHA512 安全哈希算法 (安全散列算法)(Secure Hash Algorithm),散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。查看更多介绍

HmacMD5 、HmacSHA1 、HmacSHA224 、HmacSHA256 、HmacSHA384 、HmacSHA512 这些加密算法和上边的相比较的话,区别就在于这些需要一个秘钥去和消息输入,生成消息摘要作为输出。这些加密用在服务器验证客户端非常合适:
客户端发送请求之后,服务器收到返回一个随机数,同时在会话中保存该随机数,客户端将信息和返回的随机数用这些算法签名发送给服务器,服务器用刚才记录的随机数和去数据库读取相应信息(如用户名密码)采用同样的散列算法加密和客户端传过来的签名信息对比,从而验证客户端是否合法(被拦截篡改等)。更多介绍

RSA 公钥加密算法,加密方使用公钥加密,解密方持有私钥解密,公钥和私钥是唯一匹配的,但是有公钥是无法计算出私钥的。该加密算法可以公开加密算法和公钥。用在服务器验证客户端也是非常的nice。

上面的加密算法除了 RSA都是不可逆加密,再看一下下面的可逆加密算法:

DES 、3DES 、AES 、RC2、RC4、RC2、CAST、Blowfish。通过秘钥和初始化向量采用一直加密模式进行加密。加密模式如下几种:
* ECB模式,相对简单,易于实现,相同的明文产生相同密文,所以安全性相对没那么高,该模式下初始化向量会被忽略。
* CBC模式,需要初始化向量,误差会传递,安全性高于ECB模式。
* CFB模式,需要初始化向量,隐藏了明文模式,容易造成错误传播,加密的速率有所降低。
* OFB模式,不利于并行化处理,克服了误差传递的问题。
* 更多模式详细信息

以上算法在iOS中的实现

好在上面的算法Apple都是为我们实现了,我们只需要调用相应的接口即可。在这里我们自己写了一个接口,对加密算法进行一点封装,更利于项目中使用(主要是系统的C函数N个参数,看起来累啊!)。

首先我们枚举了加密方式


typedef NS_ENUM(NSInteger, HCDStringEncryptType) {

    HCDStringEncryptTypeMD2 = 0,
    HCDStringEncryptTypeMD4,
    HCDStringEncryptTypeMD5,
    HCDStringEncryptTypeSHA1,
    HCDStringEncryptTypeSHA224,
    HCDStringEncryptTypeSHA256,
    HCDStringEncryptTypeSHA384,
    HCDStringEncryptTypeSHA512,

    HCDStringEncryptTypeHmacMD5,     //可以有密钥
    HCDStringEncryptTypeHmacSHA1,    //可以有密钥
    HCDStringEncryptTypeHmacSHA256,  //可以有密钥
    HCDStringEncryptTypeHmacSHA384,  //可以有密钥
    HCDStringEncryptTypeHmacSHA512,  //可以有密钥
    HCDStringEncryptTypeHmacSHA224,  //可以有密钥

    HCDStringEncryptTypeRC2 = 100,   //     /*****************************/
    HCDStringEncryptTypeRC4,         //     /*****************************/
    HCDStringEncryptTypeAES,         //     /*****************************/
    HCDStringEncryptTypeAES128,      //     /*** using default ECB mode **/ //AES目前只支持AES、AES128
    HCDStringEncryptTypeDES,         //     /***** 初始化向量iv会被忽略  ****/
    HCDStringEncryptType3DES,        //     /*****************************/
    HCDStringEncryptTypeCAST,        //     /*****************************/
    HCDStringEncryptTypeBlowfish,    //     /*****************************/
};

然后定义了这么一个接口


 @interface HCDStringEncryptObject : NSObject

- (nullable HCDStringEncryptObject *)initWithOriginString:(nullable NSString *)originString keyString:(nullable NSString *)keyString encryptType:(HCDStringEncryptType)encryptType isBase64:(BOOL)base64;

- (void)base64 NS_AVAILABLE(10_9, 7_0);
- (void)base64Decode NS_AVAILABLE(10_9, 7_0);

/**
 *  针对可逆加密的解密方法
 */
- (void)decode;

@property (nonatomic,readonly,getter=isBase64) BOOL base64;
@property (nonatomic,readonly) HCDStringEncryptType encryptType;
@property (strong, nonatomic, nullable,readonly) NSString *keyString;
@property (strong, nonatomic, nullable,readonly) NSString *originString;
@property (strong, nonatomic, nullable,readonly) NSString *encryptedString; //解密之后和originString 一样
@property (strong, nonatomic, nullable,readonly) NSData *encryptedData; //解密之后是originString的NSData
@end

这样的话我们就能得到加密的方式,加密之后的data以及加密之后的字符串,同时还可以选择是否进行base64编码等非常方便,至于实现的话,主要是调用系统的加密实现,然后再整。一定要记得导入#import

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发常用的加密技术 的相关文章

  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空
  • 具有隐式授权的 OAuth 应用程序中的客户端模拟

    来自 OAuth 草案 隐式section https datatracker ietf org doc html draft ietf oauth v2 31 section 1 3 2 在隐式授权流程期间发出访问令牌时 授权服务器不对客
  • iOS 中是否需要 Google App Indexing SDK 才能使用 Google DeepLinking?

    我想用谷歌应用程序索引与我的网页和 iOS 应用程序 我支持通用链接 or 深层链接用谷歌术语 与苹果Search并相应地设置我的网页 From 谷歌文档 https developers google com app indexing i
  • ios7.1:推送通知徽章更新问题

    我已经设置了Push Notification在我当前的项目之一中 我已遵循推送通知所需的所有说明 在 tag ios7 中工作正常 但在7 1当我的应用程序处于后台模式时 我在徽章更新中遇到问题 我的代码如下 BOOL applicati
  • 动态更新 UIAlertView 消息和换行符问题

    我需要在 UIAlertView 的消息中显示多行文本 我尝试过添加 n 但没有效果 它仍然显示 这是一个示例 但是 如果我将 iPhone 切换为横向模式 它会按照我的预期显示该消息 然后 如果我切换回纵向模式 它也会正确显示 更新 经过
  • 自定义 UIPopoverController 视图背景和边框颜色

    是否可以更改弹出视图的边框颜色 导航栏样式 颜色和箭头样式 颜色 如果是这样 怎么办 如果有一些示例代码可用 那就太好了 iOS 7以上 可以更改backgroundColor of UIPopoverController这会影响导航背景颜
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • Alamofire 仅在 GET 请求上出现请求错误

    我正在努力将我的项目从 AFNetworking 转移到 Alamofire 真的很喜欢这个项目 POST 请求工作得很好 但是 我在尝试发出 GET 请求时收到此错误 这是一些示例代码 class func listCloudCrednt
  • 了解 malloc_history 转储

    如果您曾经问 过如何调试 Objective C 中的释放 分配问题 您将遇到这些可以帮助跟踪问题的环境设置 NSZombieEnabled 释放后保留对象 以便您可以获得指针等 MallocStackLogging 保留对象历史记录以供以
  • Modal UIViewController 在 iPad 上总是全屏显示。为什么?

    我试图在 iPad 上创建一个简单的模式对话框 无论是小设置 UIModalPresentationFormSheet 还是大设置 UIModalPresentationPageSheet 但无论我做什么 它们都会全屏显示 带有标题栏 模态
  • iOS 上的三字母国家代码

    我知道您可以在 iOS 上获取所有国家 地区的两个字母的国家 地区代码 但是有没有办法获得三个字母的国家代码 So from http en wikipedia org wiki ISO 3166 1 alpha 2 http en wik
  • 从钥匙串保存和加载 |斯威夫特[重复]

    这个问题在这里已经有答案了 如何简单地将字符串存储在钥匙串中并在需要时加载 有几种SO解决方案 主要参考Git repo 但我需要最新 Swift 上最小和最简单的解决方案 当然 我不想添加 git 框架来简单地在我的项目中存储密码 有类似
  • 将 NSDictionary 保存到文件有任何限制吗

    我想用下面的方法来保存NSDictionary void writeDicToFile NSDictionary dic fileName NSString fileName NSString filePath NSTemporaryDir
  • iOS 9.3 出现新的 UIPDFPageRenderOperation 错误?

    我正在向 UIWebView 添加一些 PDF 链接 每次加载并做出滚动手势时 都会收到此错误 objc 910 UIPDFPageRenderOperation 对象 0x14acaca10 过度释放 当已经解除分配时 打断 objc o
  • 以编程方式进行排序时检索 ViewController 堆栈

    static func showMenuView parentVC UIViewController let storyboard UIStoryboard name Main bundle nil let resultController
  • 启动时运行后台任务

    我正在编写一个 iOS 应用程序 它使用 Dropbox Datastore API 在多个设备之间同步数据 在 Android 上 我可以告诉服务在启动时启动 这使其能够同步 设备关闭时可能发生的任何更改 我无法找到让我的应用程序在 iO
  • 播放声音无延迟 iOS

    我找不到如何以低延迟播放真实声音的方法 我尝试使用 AVFoundation 音频播放器 巨大的延迟大约 500 毫秒 所以我尝试创建系统声音 如果运气不好 延迟大约为 200 毫秒 虽然不多 但对我来说没有用 我最多需要 50 毫秒 确保
  • iOS swift 应用程序启动时出现黑屏

    我有个问题 当我启动我的应用程序时 会看到黑屏几秒钟 然后出现启动屏幕 我的启动画面不是默认的 我使用了视图控制器 因为我的启动画面有一个动画 我搜索了一个解决方案 我得到了这个 在我的闪屏加载 iPhone 之前出现黑屏 https st

随机推荐

  • hdoj1007

    由于这道题数据的特点 按照x排序会莫名其妙的TLE 按y排序就好了 也不需要什么辅助数组 一个p数组足矣 546ms AC 按照数组已经排序好的特点 如果从左边取一个点 它和右边取的一个点的y差值大于min d 就不需要继续从右边取点了 因
  • day29

    目录 01 反馈 02 回顾 03 并发访问MySQL 问题概述 并发访问的问题 04 并发访问MySQL 问题演示 05 并发访问MySQL read committed解决脏读问题 06 并发访问MySQL repeatable rea
  • 高并发解决方案相关面试题

    什么是DNS解析域名 DNS域名解析就是讲域名转化为不需要显示端口 二级域名的端口一般为80 的IP地址 域名解析的一般先去本地环境的host文件读取配置 解析成对应的IP地址 根据IP地址访问对应的服务器 若host文件未配置 则会去网络
  • C# 设置窗体自适应屏幕分辨率

  • 把Spring Boot项目打为可执行jar包

    前言 这两天没太多事了 就去学了一下后端的内容 发现只要有基础了 学其他的还是挺快的 本篇解决的是SpringBoot打成可执行的jar包 在网上找别人直接用命令 可是我这边显示错误 于是就自己查了查 记录一下 步骤 使用IDEA 一 使用
  • ValueError: check_hostname requires server_hostname解决方法

    问题描述 使用cookies登录twitter 由于科学上网的原因 电脑开了代理 会出现这个错误 尝试的解决方法 关闭代理 不能科学上网 pass 添加proxy proxy https http 8 88 888 8 8888 报另一个错
  • 自动化平台搭建之代码结构总览

    自动化框架总体工程结构 之前写了一篇 自动化平台搭建之定制log系统 确切说是还没写完 由于自己能力有限 自底向上进行搭建框架时很容易陷入到一个模块的详细实现中 所以尝试锻炼一下自顶向下的思维方式 先把整个框架搭起来 然后再对每个模块的具体
  • python调整对齐的快捷键

    选中对应的行 1 快捷键组合为ctrl键和 键 ctrl 或者 2 快捷键组合为ctrl键和 键 ctrl
  • 数据可视化图表,你选对了吗?

    戳蓝字 CSDN云计算 关注我们哦 Photo by Jason Coudriet on Unsplash 文 邻川 来源 阿里巴巴中间件 程序员懂画图 一宝变三宝 继上期 阿里程序员小技巧 中 阿里巴巴技术专家三画分享了他关于 如何画好架
  • Index was outside the bounds of the array.错误解决

    今天在SL中遇到了Index was outside the bounds of the array 这个错误 对比了不同的类 调试了近2个小时 未发现类的异常 于是重建dbml文件 测试通过 可能是在dbml文件进行多次修改时 有些类进行
  • 100天精通Python(基础篇)——第28天:函数学习

    函数传参 def add x y print f x y x y add 1 2 add 2 3 add 4 5 add 9 8 5 9 返回值 def add x y return x y print f x y x y r add 1
  • Kali Linux 从入门到精通(二)-安装

    Kali Linux 从入门到精通 二 安装 Kail Linux 安装 持久加密USB安装 1 LUSK Linux Unified Key Setup 磁盘分区加密规范 不依赖与操作系统的磁盘级加密 Window DoxBox 后端 d
  • python根据指定的数据(实验表格)绘制三维曲面图

    本文记录对于给定数据用python绘制三维曲面图的一个可用代码 文章目录 一 需求 二 代码及注意点 三 完整代码 一 需求 将上述表格中的数据绘制成三维曲面图 二 代码及注意点 首先输入X轴及Y轴数据 X np array 3 4 5 6
  • DDL与DML

    1 DDL和DML的含义 DML Data Manipulation Language 数据操纵语言 适用范围 对数据库中的数据进行一些简单操作 如 insert delete update select 等 DDL Data Defini
  • 2023年2月27日-3月12日(抄lidarpointcloud源码,10小时,合计1959小时,剩余8081小时)

    根据月计划 目前 ue视频教程进行到了智 慧 城 市 3 12 mysql 7 1 tf1 4 11 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 fps1 5 socket 2 57 Opengl
  • ARP协议原理

    引言 从前一篇文章中 我们知道计算机中会维护一个ARP缓存表 这个表记录着IP地址与MAC地址的映射关系 我们可以通过在电脑的控制台通过arp a指令查看一下我们自己计算机的ARP缓存表 那么什么是ARP协议呢 初始ARP ARP协议是地址
  • 零基础学Python有什么建议?千万不要自己乱学,不然就废了

    首先零基础是能学python的 很多编程大神入门之前都选择先学习Python 所以想学就大胆去学吧 没学之前谁不是零基础 就算是现在才下定决心学也不怕 学习Python什么时候都不算晚 零基础如何学好python 作为一个学了python两
  • 关于Element-ui el-cascader不能rules校验问题

    明明我能打印出选择的值 而且v model也绑定成功了值 用vue devtools扩展程序能看到绑定成功后的值 我的解决方法 自定义表单校验规则 不用 required 属性去校验是否必须验证 用自定义方式去校验 el cascader
  • C、C++、C#、python、java编程—时间与日期操作

    C资料 菜鸟教程 C语言中文网 C community C 资料 菜鸟教程 cplusplus C community C 资料 菜鸟教程 microsoftC 文档 python资料 菜鸟教程 python标准库 Java资料 菜鸟教程
  • iOS开发常用的加密技术

    iOS开发常用的加密技术 我胡汉三又回来了啦 时隔几月没有更博客了 我自己都受不鸟自己啦 在这几个月里经历了很多杂七杂八的事儿 不过话说回来 再怎么忙都不应该中断学习的步伐 再怎么忙都不能成为博客停更的理由 好吧就检讨到这里 开始进入正题