网络数据加密, 数据安全

前言:

GET请求时数据直接暴露在了请求地址中,POST请求提交用户的隐私数据虽然不能直接看见隐私数据,但还是不能完全解决安全问题,可以利用软件Charles等抓包软件设置代理服务器,拦截查看手机的请求数据,因此:提交用户的隐私数据时:要使用暗文提交,要加密处理后再提交

常见的加密算法

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

公司都会有一套自己的加密方案,按照公司协议文档加密即可

MD5

全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”,是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现.将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2,MD3和MD4.

效果:对输入信息生成唯一的128位散列值(32个字符)

MD5的特点

压缩性:任意长度的数据,算出的MD5值长度都是固定的.

容易计算:从原数据计算出MD5值很容易.

抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别.

强抗碰撞:已知原数据和其MD5值.想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的.

不可逆:根据输出值,不能得到原始的明文,即其过程

iOS中为字符串进行MD5加密

#import 
- (NSString *)md5_32bit:(NSString *)input
{
    const char * str = [input UTF8String];
    unsigned char md[CC_MD5_DIGEST_LENGTH];
    CC_MD5(str, (int)strlen(str), md);
    NSMutableString * ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [ret appendFormat:@"%02X",md[i]];
    }
    return ret;
}

MD5改进操作

对MD5稍作改进,以增加解密的难度

加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5

先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序

加密数据上传服务器过程

客户端对数据加密后执行上传操作, 服务器和客户端用同样的算法对数据进行加密, 登录或注册的时候, 直接比较加密后(密文)的数据, 比对成功, 说明他们的明文也一样

用户的隐私数据,只有在用户输入的时候用户看到的是明文,其他情况都是密文处理

网络数据加密, 数据安全_第1张图片

常见术语

  • 密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称 密钥与非对称密钥(也可以根据用途来分为加密密钥和解密密钥)。
  • 明文:没有进行加密,能够直接代表原文含义的信息。
  • 密文:经过加密处理处理之后,隐藏原文含义的信息。
  • 加密:将明文转换成密文的实施过程。
  • 解密:将密文转换成明文的实施过程。
  • 数据安全:是一种主动的包含措施,数据本身的安全必须基于可靠的加密算法与安全体系,主要是有对称算法与公开密钥密码体系两种(非对称算法),都包含了数据的加密和解密过程
  • 对称算法:对称密码算法有时又叫传统密码算法,是指加密密钥可以从解密密钥中推算出来,反过来也成立。
  • 非对称算法:非对称密钥也叫公开密钥加密,就是不能由其中一个密钥推导出另一个密钥。
    加密算法有很多种,在iOS开发当中,MD5是我们常用的摘要算法。

哈希算法

  • 哈希算法:哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。
  • 哈希值是一段数据唯一且极其紧凑的数值表示形式。数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。
  • 典型的的哈希算法有:MD2、MD4、MD5 和 SHA-1等。
  • 哈希算法是一种摘要算法,主要作用是用来获取数据的摘要。严格意义上来说不属于加密算法(因为没有解密过程)
  • 获取字符串的MD5值比较简单,其它对象可以先转化成NSData对象再进行操作
  • 可以根据路径直接获取文件数据,也可以将对象写入文件件后获取为NSData对象
  • iOS同样支持SHA1、base64、AES、钥匙串等方式加密数据

钥匙串加密

  • 钥匙串简介:钥匙串:(英文:Keychain)是苹果公司Mac OS中的密码管理系统。它在Mac OS 8.6中和iOS7之后被导入,并且包括在了所有后续的各版本中。一个钥匙串可以包含多种类型的数据:密码(包括网站,FTP服务器,SSH帐户,网络共享,无线网络,群组软件,加密磁盘镜像等),私钥,电子证书和加密笔记等。
  • 苹果 iOS 和 Mac OS X 系统自带了一套敏感信息保存方案:”钥匙串” (Keychain)。
  • 保存在钥匙串的内容相当于系统对其做了保护,在设备锁定时进行了加密处理。
  • 钥匙串中的条目称为SecItem,但它是存储在CFDictionary中的。SecItemRef类型并不存在。SecItem有五类:通用密码互联网密码、证书、密钥和身份。在大多数情况下,我们用到的都是通用密码。
  • 钥匙串的使用和字典非常的相似。
  • 用原生的 Security.framework 就可以实现钥匙串的访问、读写。但是只能在真机上进行。通常我们使用KeychainItemWrapper(github下载地址)来完成钥匙串的加密。

公钥加密

  • 公钥加密也叫非对称加密
  • 常用算法有RSA、ElGamal、背包算法、Rabin等

你可能感兴趣的:(iOS,Network,Data)