开发常用到的几种加密方式

有时候我们经常会听到一些加密方式 最常见的就是Base64和MD5  这里分享一下平时看到的介绍和心得

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)。这里的值实际就是数据在字符表中的索引。数据加密之后,数据量会变大,变大 1/3 左右.[data base64EncodedDataWithOptions:0] 加密成二进制数据

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

2.MD5

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

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

加密方式

 

    NSString *password = @"zhang";

 

    password = [password md5String];

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

拼接盐值

 

password = [password stringByAppendingString:salt];也就是可以任意拼接东西在后面

 

2.3 时间戳/动态密码

 

1> 实现目标

 

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

 

2> 原理

 

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

 

3> 实现细节

 

客户端和服务器端要求时间一致

时间精度越高,越安全

客户端:发送网络请求的时候依当前时间为基准进行加密.

服务器端:以接收到时间为基准进行加密.还要以接收到的时间的前一分钟时间为基准进行加密.

服务器端:判断这两次的密码和客户端发送的密码是否一致.  现在苹果的开发者平台就用了这个技术进行加密 总是要获取动态密码

原文地址:https://www.cnblogs.com/wangxiaoqi/p/6498200.html