数据安全

本文意义

  • 了解加密算法MD5的基本使用
  • 了解HTTPS,如何接受安全证书

提交用户的隐私数据

  • 首先一定要使用POST请求,向服务器提交用户的隐私数据

    • GET请求的所有参数都直接暴露在URL中
    • 请求的URL一般会记录在服务器的访问日志中
    • 服务器的访问日志是黑客攻击的重点对象之一
  • 但仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题

    • 可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据
  • 所以:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交

  • 一般会使用加密算法和HTTPS对隐私数据进行加密,再提交到服务器

加密算法

常见的加密算法

  • MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES

加密算法的选择

  • 一般公司都会有一套自己的加密方案,按照公司接口文档的规定去加密

MD5

什么是MD5

  • 全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
  • 效果:对输入信息生成唯一的128位散列值(32个字符)

MD5的特点

  • 输入两个不同的明文不会得到相同的输出值
  • 根据输出值,不能得到原始的明文,即其过程不可逆,但现在有大型的数据库将明文对应的暗纹保存了,通过查询可以得到明文,算法本身是不可逆的

MD5的应用

  • 由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
  • 主要运用在数字签名、文件完整性验证以及口令加密等方面

MD5改进

  • 现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
  • 加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
  • 先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
  • 总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文

MD5的使用步骤

  • 添加两个文件
    • NSString+hash.h
    • NSString+hash.m
  • 导入头文件
  • 调用字符串的md5String方法
    NSString *text = @"www.baidu.com";
    NSString *md = [text md5String];

HTTPS

  • HTTPS = HTTP + ssl(secure socket layer,安全套接字层)

  • 基本原理:客户端向服务器发送请求,服务器并不是马上响应数据给客户端,而是先将安全证书(受保护控件)传给客户端,只有客户端同意了这个安全证书,服务器才会响应数据给客户端;只要客户端接受了该证书,客户端发送的请求数据都会受公钥保护,只有在服务器拿到私钥才能解密,这样保证数据的安全。

  • 一些大型的网站默认让客户端同意证书

  • AFNetworking和SDWebImage框架内部已封装了同意证书代码

是否同意安全证书实现步骤

  • 遵守协议NSURLSessionTaskDelegate,实现以下方法
  • 实现代码
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler
{
    // 证书有好几种
    // 如果不是服务器信任类型的证书,直接返回
    if (![challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) return;

    // 如果block不为空,才执行相应代码,如果为空,会报错,所以要加上判断
    if (completionHandler) {

        // 通过调用这个block,来告诉URLSession要不要接收这个证书
        // NSURLSessionAuthChallengeDisposition : 如何处理这个安全证书
        // NSURLCredential :安全证书
        completionHandler(NSURLSessionAuthChallengeUseCredential, challenge.proposedCredential);
    }

}
  • 上例程序中,也可以根据服务器的信任信息创建证书对象
 NSURLCredential *crdential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
  • 调用block代码的装逼版,注意冒号:后面不能为空
 !completionHandler ? : completionHandler(NSURLSessionAuthChallengeUseCredential, challenge.proposedCredential);

你可能感兴趣的:(数据安全)