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 中的加密方式的更多相关文章

  1. iOS中的加密方式 与 文件解压缩

    1.Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base6 ...

  2. (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

    我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...

  3. iOS中的存储方式

    1.Plist 1.1 了解沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其它文件系统隔离.应用必须呆在自己的沙盒里.其它应用不能访问该沙盒. 一个程序中所有的非代码文件都可以 ...

  4. iOS常用的加密方式--备用

    MD5 iOS代码加密 创建MD5类,代码如下 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSStri ...

  5. iOS常用的加密方式

    MD5 iOS代码加密 创建MD5类,代码如下 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSStri ...

  6. iOS中MD5加密字符串实现

    1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...

  7. PHP中的加密方式有如下几种

    1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str  --  原始字符串. raw_output  --  ...

  8. iOS中的加密操作

    最近项目中用到了一些加密操作,在这里简单总结了一下.总的来说加密分为对称加密和非对称加密两种,下面对这两种加密方式作一个简单的说明. 对称加密(Symmetric Cryptography) 对称加密 ...

  9. iOS中RSA加密详解

    先贴出代码的地址,做个说明,因为RSA加密在iOS的代码比较少,网上开源的也很少,最多的才8个星星.使用过程中发现有错误.然后我做了修正,和另一个库进行了整合,然后将其支持CocoaPod. http ...

随机推荐

  1. oracle学习 六 删除表空间,数据文件的语句以及导入导出dmp文件的方法(持续更新中)

    要想删除表空间就要先删除数据文件 例如这个例子 CREATE TABLESPACE STHSGIMGDB_SPACE11 DATAFILE 'D:\ORACLEDATABASE\JinHuaDataB ...

  2. circle area

    circle area Github 链接:传送门 本次作业要求 Create a program that asks for the radius of a circle and prints th ...

  3. HDU3535AreYouBusy(分组背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=3535 分组背包,每一组加了以下三个限制 0 stands for the sets that should ch ...

  4. HDU 3696 Farm Game(dp+拓扑排序)

    Farm Game Problem Description “Farm Game” is one of the most popular games in online community. In t ...

  5. Find n‘th number in a number system with only 3 and 4

    这是在看geeksforgeeks时看到的一道题,挺不错的,题目是 Given a number system with only 3 and 4. Find the nth number in th ...

  6. iOS开发-关于网络状态的判断

    在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...

  7. thinkphp 3+ 观后详解 (1)

    最近面试了一些公司,发现自己的对于架构能力的不足,于是决定开始从最基本的代码做起.先看看大牛们怎么架构整个框架的.鉴于国外的框架比较难懂,于是就选择了国内比较流行的thinkphp来进行研究. 下面写 ...

  8. Java常见排序算法之冒泡排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  9. 使用Machin公式计算

    使用Machin公式计算,并使用百亿进制+末项位数控制,这里可算出数万位(比最简PI快80倍),源代码约40行,在本网页中. 计算公式 PI=16arctg(1/5)-4arctg(1/239),其中 ...

  10. HDU 5601 N*M bulbs 找规律

    N*M bulbs 题目连接: http://codeforces.com/contest/510/problem/C Description NM个灯泡排成一片,也就是排成一个NM的矩形,有些开着, ...