设为首页 加入收藏

TOP

加密(一)
2017-10-13 10:29:06 】 浏览:9140
Tags:加密

加密方式

1 base64

1.1 简介

Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个“=”。例:将对ABC进行BASE64编码首先取ABC对应的ASCII码值。A(65)B(66)C(67)。再取二进制值A(01000001)B(01000010)C(01000011),然后把这三个字节的二进制码接起来(010000010100001001000011),再以6位为单位分成4个数据块并在最高位填充两个0后形成4个字节的编码后的值(00010000)(00010100)(00001001)(00000011)。蓝色部分为真实数据。再把这四个字节数据转化成10进制数得(16)(20)(19)(3)。最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D)。这里的值实际就是数据在字符表中的索引。

注:BASE64字符表:包括大写 A-Z 小写 a-z 数字 0-9 和+ /

解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据.

1.2 base64的加密原则

base64加密原则: 6 bit(原8bit) 一个字节. 不足的位数 用0 补齐.两个0 用一个 = 表示.

1.3 加密特点:数据加密之后,数据量会变大,变大 1/3 左右.

1.4 使用步骤

加密:

1> 将要加密的数据转为二进制的 data

2> [data base64EncodedDataWithOptions:0] 加密成二进制数据

[data base64EncodedStringWithOptions:0] 加密成字符串数据

3> 写入文件

解密:

1>    将要解密的文件转为二进制数据

[str dataUsingEncoding:NSUTF8StringEncoding] //是字符串

2>    [[NSData alloc] initWithBase64EncodedData:data options:0];

 [[NSData alloc] initWithBase64EncodedString:…]

3>    写入文件

 

2 MD5

2.1 MD5简介

MD5的全称是Message-DigestAlgorithm 5,Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了"字节串"而不是"字符串"这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 MD5将任意长度的"字节串"变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被"篡改"。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。

MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不"知道"用户的密码是什么。

注: MD5加密是不可逆的,也就是说, MD5加密后是不能解密的,所谓的解密只是用大数据的”试用”,来测出结果的.

2.2 加密方式

    NSString *password = @"zhang";

    password = [password md5String];

注:单纯的 MD5加密是不安全的,因此要用到 MD5加盐的方式

2.3 MD5加盐

> 盐值:MD5加盐的值,加的盐值越高越好.(盐值可以随意添加)

> 试用步骤:

1> 生成盐值

NSString *salt = @”盐值”;

2> 拼接盐值

password = [password stringByAppendingString:salt];

3> 加密

password = password.md5String;

2.3 时间戳/动态密码

1> 实现目标

用户的密码是一定的,但是每次发送给网络的密码都不同.相同的密码相同的加密算法,每次获得的值不同.客户端和服务器端的时间是相同的.

2> 原理

客户端和服务器端依时间为基准采用相同的加密算法

3> 实现细节

  • 客户端和服务器端要求时间一致
  • 时间精度越高,越安全
  • 客户端:发送网络请求的时候依当前时间为基准进行加密.
  • 服务器端:以接收到时间为基准进行加密.还要以接收到的时间的前一分钟时间为基准进行加密.
  • 服务器端:判断这两次的密码和客户端发送的密码是否一致.

4> 实现步骤

  • 第一次hmac 加密

   password = [password hmacMD5StringWithKey:hmacKey];

  • 将加密后的值和时间进行拼接

password = [password stringByAppendingString:timer];

  • 第二次加密

password = [password hmacMD5StringWithKey:hmacKey];

 

补充:

DNS

DES是Data Encryption Standard(数据加密标准)的缩写。DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。

DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。经过16轮后,左,右半部分合在一起经过一个末置换,这样就完成了。在每一轮中,密匙位移位,然后再从密匙

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇NSURLConnection & NSRULSession 下一篇iOS 学习 - 11.圆角(小于等于四个..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目