开发常用到的几种加密方式
Posted wangxiaoqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发常用到的几种加密方式相关的知识,希望对你有一定的参考价值。
有时候我们经常会听到一些加密方式 最常见的就是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> 实现细节
客户端和服务器端要求时间一致
时间精度越高,越安全
客户端:发送网络请求的时候依当前时间为基准进行加密.
服务器端:以接收到时间为基准进行加密.还要以接收到的时间的前一分钟时间为基准进行加密.
服务器端:判断这两次的密码和客户端发送的密码是否一致. 现在苹果的开发者平台就用了这个技术进行加密 总是要获取动态密码
以上是关于开发常用到的几种加密方式的主要内容,如果未能解决你的问题,请参考以下文章