iOS 中的加密方式
iOS 中的加密方式
1 加密方式主要有: Base64,MD5,RSA,DES,AES,钥匙串存储,Cookie
2 各加密方式的比较
2.1 Base64
2.1.1 基本原理:采用64个基本的 ASCII 值对数据进行重新编码.
2.1.2 实现步骤
> 将需要编码的数据拆分成字节数组
> 以3个字节为一组
> 按顺序排列24位数据,再将这24位数据均分为4组.
> 再在每组的最高位前补2个0,称为一个字节.
> 在最后一个字节不足的时候末尾填0
> 在最后编码完成的时候末尾添加1到2个=号
注:Base64的字符包括大/小写a—z,0—9,以及+/
Base64加密后还可以进行解密
2.2 MD5(数字签名)
2.2.1 原理:将任意长度是字节串转化为特定长度的长整数.
注:转换是将字节串转换而不是字符串转换.
谨记:MD5加密是不可解密的,因此用 MD5加密的程序进行密码验证的时候,只是验证加密之后的字符串比较,而不知道用户的密码.
2.2.2 使用
> 使用步骤很简单,但是单纯的 MD5加密是不安全的,常用一下方法
> MD5加盐:所谓的盐值就是一个字符串.即将用户的密码和盐值拼接之后再加密.
> 时间戳/动态密码:即在进行 MD5加密的时候讲时间和密码结合之后再加密,故可以做到相同的加密方式,形同的密码等加密之后的值是不同的
注:时间戳/动态密码加密要求客户端和服务器端的时间要相同.
> 时间戳/动态密码加密的实现步骤:首先,第一次用 hmac MD5加密.其次,将加密后的值和当前时间的字符串进行拼接.最后,将拼接后的值再次用 hmac MD5进行加密.
服务器端接收到密码之后要计算当前时间和上一分钟的值和密码进行比较
2.3 DES
2.3.1 原理:它是一种分组加密算法,它是以64位为分组对数据进行加密.同时 DES 也是一种对称加密算法(加密和解密用同一算法).它的密钥长度是56位(每一个第8位用作奇偶校验),密钥可以是任意的56位的数,而且可以任意的改变.
补充:
DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。经过16轮后,左,右半部分合在一起经过一个末置换,这样就完成了。在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了。
解密过程:在经过所有的代替、置换、异或盒循环之后,你也许认为解密算法与加密算法完全不同。恰恰相反,经过精心选择的各种操作,获得了一个非常有用的性质:加密和解密使用相同的算法。DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3….K16那么解密密匙就是K16,K15,K14…K1
2.4 钥匙串存储(SSKeychain 第三方框架)
2.4.1 使用原理:可以在钥匙串中直接写入明文密码.
注:要给写入的密码一个标示符,以便于取出密码.
2.5 Cookie
2.5.1 是一个网络信息块,用来存储信息
2.5.2 Cookie 会自动登录,会将用户的数据自动发给服务器.
注: Cookie 中的信息保存在NSHTTPCookieStorage中.
2.6 AES
2.6.1 原理:是一个对称加密算法.加长了 DES 加密的长度. AES设计有三个密钥长度:128,192,256位三种. AES算法主要包括三个方面:轮变化、圈数和密钥扩展.
具体原理: http://blog.sina.com.cn/s/blog_4b957026010006kf.html
2.6.2 首先获取要加密的字符串
其次加密(AESCrypt类中)
2.7 RSA
2.7.1 原理:它是一种非对称加密方法,需要两个秘钥公钥和私钥.公钥和私钥是一对,如果用公钥进行加密,就只能用私钥进行解密,如果用私钥进行加密,那么久只能用公钥进行解密.
工作流程:接收方获取一对密钥,让后将其中一个密钥发送给发送方,发送方用接收方发过来的密钥进行加密之后,再讲密码发给接收方,由于其中一个密钥只能由另外一个密钥进行解密,而另外一个密钥在接收方手中并没有在网络中发送,故可以保证很安全.
2.7.2 获取公钥和私钥的步骤:
> 找出两个很大的质数:A 和B
> C = A*B
> D = (A-1)*(B-1)
> 找出整数 E,E 与 D 互质.
> 找出整数 F,使得 E*F/D 余数为1
> 计算后得 E 是公钥, F 是私钥.
> N 负责公钥和私钥之间的联系,其公式如下(对 X 进行加密)
加密:(X^E)%N = Y
解密:(Y^E)%N = X
iOS 中的加密方式的更多相关文章
- iOS中的加密方式 与 文件解压缩
1.Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base6 ...
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- iOS中的存储方式
1.Plist 1.1 了解沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其它文件系统隔离.应用必须呆在自己的沙盒里.其它应用不能访问该沙盒. 一个程序中所有的非代码文件都可以 ...
- iOS常用的加密方式--备用
MD5 iOS代码加密 创建MD5类,代码如下 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSStri ...
- iOS常用的加密方式
MD5 iOS代码加密 创建MD5类,代码如下 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSStri ...
- iOS中MD5加密字符串实现
1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...
- PHP中的加密方式有如下几种
1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str -- 原始字符串. raw_output -- ...
- iOS中的加密操作
最近项目中用到了一些加密操作,在这里简单总结了一下.总的来说加密分为对称加密和非对称加密两种,下面对这两种加密方式作一个简单的说明. 对称加密(Symmetric Cryptography) 对称加密 ...
- iOS中RSA加密详解
先贴出代码的地址,做个说明,因为RSA加密在iOS的代码比较少,网上开源的也很少,最多的才8个星星.使用过程中发现有错误.然后我做了修正,和另一个库进行了整合,然后将其支持CocoaPod. http ...
随机推荐
- android ListView中的Item有Button时候点击异常处理
1.当ListView中有Button的时候往往会遇到很多问题,比较常见的一个问题是: 假设:在ListView中有N个Item当点击其中某个Item中的Button的时候,需要改变当前Button的 ...
- requests设置headers,proxies,cookies
header = {'referer':'http://www.baidu.com'} # referer代表从什么网页跳过来的,其他属性同理设置 proxy = { 'http':'115.28.5 ...
- C++的优秀特性1:引用
(转载请注明原创于潘多拉盒子) 一本典型的C语言教科书的厚度大约是200页左右,而一本典型的C++教科书的厚度至少要500页.比如K&R的<The C Programming Langu ...
- 计算Excel中的Sheet个数
$strpath="d:\ee.xlsx"$excel=new-object -comobject excel.application$WorkBook = $excel.Work ...
- Android Studio中导入第三方库
之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...
- C语言中的函数
C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...
- h5-5 canvas
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 0c-41-ARC使用特点及注意事项
1.ARC特点总结 1)不允许调用release,retain,retainCount 2)允许重写dealloc,但是不允许调用[super dealloc] 3)@property的参数: str ...
- 疑难杂症:org.hibernate.MappingException: Unknown entity,annotation配置Entity类报错
引言: 夜声人静,外面下着稀里哗啦的雨,周末的晚上,还在键盘上舞动手指. 此刻很感激一个人一篇随笔,感谢xiaochao以及他的<org.hibernate.MappingException: ...
- SimpleDateFormat使用详解及与毫秒的相互转换
1. SimpleDateFormat使用详解 public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方 ...