iOS数据安全及加密

初七 发布于5月前 阅读134次
0 条评论

Base64编码

Base64编码是一种用64个字符(其实是65个字符,“=”是填充字符)来表示任意二进制数据的方法,编码后的数据是一个字符串。

  • 原理

    1. 准备一个包含64个字符的数组,其中包含的字符为:A-Z、a-z、0-9、+、/。
    2. 64个字符需要6位二进制来表示,表示成数值为0~63。
    3. 对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,再划为4小组,每小组正好6个bit,然后查表,获得相应的4个字符,就是编码后的字符串。
    4. 如果数据的字节数不是3的倍数,需在原数据后面添加1个或2个零值字节,使其字节数是3的倍数。然后,在编码后的字符串后面添加1个或2个等号“=”,表示所添加的零值字节数。解码的时候,会自动去掉。
  • 特点

    1. Base64编码是可逆的编码方式,从编码的方式即可逆推出解码的方式。
    2. Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%。
    3. 标准的Base64编码后可能出现字符“+”和“/”,在URL中就不能直接作为参数。
    4. 可以自己定义64个字符的排列顺序,这样就可以自定义Base64编码。
    5. Base64编码的长度永远是4的倍数。
  • 应用

    1. Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。
    2. Base64也会经常用作一个简单的“加密”来保护某些数据(标准Base64编码解码无需额外信息即完全可逆),而真正的加密通常都比较繁琐。
    3. HTML内嵌Base64编码图片:绝大多数现代浏览器都支持一种名为 Data URLs 的特性,允许使用Base64对图片或其他文件的二进制数据进行编码,将其作为文本字符串嵌入网页中。
    4. 电子邮件系统:SMTP协议一开始是基于纯ASCII文本的,对于二进制文件(比如邮件附件中的图像、声音等)的处理并不好,所以后来新增MIME标准来编码二进制文件,使其能够通过SMTP协议传输。

MD5

MD5即Message-Digest Algorithm 5(信息-摘要算法5)一种被广泛使用的杂凑算法,可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致。MD5的前身有MD2、MD3和MD4。

  • 原理

    1. 输入信息进行填充,使其位长对512求余的结果等于448。如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。
    2. 记录信息长度,在第一步的结果后面附加一个以64位二进制表示的填充前信息长度(单位为Bit),如果二进制表示的填充前信息长度超过64位,则取低64位。经过这两步的处理,信息的位长=N512+448+64=(N+1)512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。
    3. 初始化变量,初始的128位值为初试链接变量,这些参数用于第一轮的运算,以大端字节序来表示,他们分别为A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210。每一个变量给出的数值是高字节存于内存低地址,低字节存于内存高地址,即大端字节序。在程序中变量A、B、C、D的值分别为0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476。
    4. 处理分组数据,分组数为N+1,每组细分成16个小组,每个小组32位。每组64次运算。
      ① 四个非线性函数,每组用一个

      F(X,Y,Z)=(X&Y)|((~X)&Z)
      G(X,Y,Z)=(X&Z)|(Y&(~Z))
      H(X,Y,Z)=X^Y^Z
      I(X,Y,Z)=Y^(X|(~Z))

      ②每组的四种操作

      /* F :一个非线性函数,一个函数运算一次 Mi :表示一个 32-bits 的输入数据 Ki:表示一个 32-bits 常数,用来完成每次不同的计算。假设Mj表示消息的第j个子分组(从0到15),常数ti是4294967296*abs( sin(i) )的整数部分,i 取值从1到64,单位是弧度。(4294967296=2^(32))*/
      FF(a ,b ,c ,d ,Mj ,s ,ti ) 操作为 a = b + ( (a + F(b,c,d) + Mj + ti) << s) // 第一轮用,共16次
      GG(a ,b ,c ,d ,Mj ,s ,ti ) 操作为 a = b + ( (a + G(b,c,d) + Mj + ti) << s) // 第二轮用,共16次
      HH(a ,b ,c ,d ,Mj ,s ,ti) 操作为 a = b + ( (a + H(b,c,d) + Mj + ti) << s)  // 第三轮用,共16次
      II(a ,b ,c ,d ,Mj ,s ,ti) 操作为 a = b + ( (a + I(b,c,d) + Mj + ti) << s)  // 第四轮用,共16次

      ③ 每组完成之后,将a、b、c、d分别在原来基础上再加上A、B、C、D。即a = a + A,b = b + B,c = c + C,d = d + D,然后用下一分组数据继续运行以上算法。
      ④ 最后的输出是a、b、c和d的级联,由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

  • 特点

    1. 不可逆:根据输出值,不能得到原始的明文。
    2. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    4. 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
  • 应用
    md5算法主要运用在数字签名、文件完整性验证以及口令加密等方面。
  • 注意
    MD5后所得到的通常是32位的编码,16位编码就是从32位MD5散列中把中间16位提取出来!其实破解16位MD5散列要比破解32位MD5散列还慢,因为他多了一个步骤,就是使用32位加密后再把中间16位提取出来, 然后再进行对比。

查看原文: iOS数据安全及加密

  • yellowwolf
  • goldenostrich
  • ticklishpeacock
  • blackostrich
  • whitekoala
  • greengorilla
  • purpleostrich
需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。