zoukankan      html  css  js  c++  java
  • 开发常用到的几种加密方式

    有时候我们经常会听到一些加密方式 最常见的就是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> 实现细节

     

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

    时间精度越高,越安全

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

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

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

  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/wangxiaoqi/p/6498200.html
Copyright © 2011-2022 走看看