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 ...
随机推荐
- initialSize,maxTotal,maxIdle,minIdle,maxWaitMillis
初始化连接数:默认值 0 同一时刻可分配最大连接数:默认值 8 ,设置为负数时不做限制 最大空闲连接,默认值 8 ,超出连接将被释放 最小空闲连接数,默认值 0 请求连接最大等待时间(毫秒),默认值 ...
- CreateWaitableTimer和SetWaitableTimer函数(定时器)
用户感觉到软件的好用,就是可以定时地做一些工作,而不需要人参与进去.比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物.要想 实现这些功能,就可以使用定时器的API函数CreateWai ...
- hdoj 5358 First One
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5358 一开始一直以为是一道数学题,在找有什么规律化简Log2(S(i,j)),结束了以后才造 ⌊lo ...
- JQuery 的bind和unbind函数
测试:页面代码:<body> <input type="button" name="aaa" value="点击我" ...
- jQuery 的选择器
本文来自网上转帖 1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的名称选择, ...
- HttpRequest Get Post,WebClient Get
#region HttpRequestGet public string HttpRequestGet(string url) { return HttpRequestGet(url, WebRequ ...
- wpf图片切换,幻灯效果
xaml: <Window x:Class="WpfApplication1.PicShow" xmlns="http://schemas.microsoft.co ...
- Js 基本数据类型、引用数据类型
数据类型 1. ECMAScript变量包含两种不同类型的值:基本类型值.引用类型值: 2. 基本类型值:指的是保存在栈内存中的简单数据段: 3. 引用类型值:指的是那些保存在堆内存中的对 ...
- Oracle数据库多语言文字存储解决方案
一.关于字符集 字符集(也称字元集,Character Set)就是字符编码表(codepage),一个字符不论英文.中文.韩文等在计算机系统内存或硬盘中通过二进制的字节(Byte)保存,这个二进制的 ...
- Error loading: \Java\jdk1.6.0_35\jre\bin\server\jvm.dll
先看看错误:complie: [exec] Error loading: D:\Program Files\Java\jdk1.6.0_35\jre\bin\server\jvm.dll [exec] ...