数据加密
2016-10-19 本文已影响29人
Mario_ZJ
数据安全
-
数据安全的原则
1)在网络上"不允许"传输用户隐私数据的"明文"
2)在本地"不允许"保存用户隐私数据的"明文" - 请求的方法
- 一定要使用POST请求提交用户的隐私数据
这个请求的方式,可以将于用户相关的信息全部放在一个请求体内,不会暴露在请求的URL中 - GET请求的所有参数都直接暴露在了URL中
这个请求的方式,会将用户的私人信息暴露在请求的URL内,不利于私人信息的保密 - 请求的URL一般会记录在服务器的访问日志中
- 服务器的访问日志是黑客攻击的重点对象之一
-
用户的隐私数据都包含哪些
用户的隐私数据,一般都包含用户的账号/密码,银行的账号等等 -
数据拦截的方式
1.数据的拦截有多种多样的方式,作为编程人员,平时最常做的接口验证,需要拦截数据,查看请求到的数据是否正常,这里常用的到软件是Charles
2.平时仅仅使用POST请求提交用户的隐私数据,还是不能完全的解决安全问题,因为可以使用软件(比如Charles),通过设置代理服务器,可以拦截并查看手机客户端的请求数据,因此,在提交用户的隐私数据时,一定不要明文(包括POST请求方式中的请求体内管用用户隐私的内容)提交,必须要加密处理后再提交 - 信息安全所面临的威胁
- 机密性(面临着被窃听,秘密泄露的威胁)
- 完整性(面临着被篡改,信息被修改的威胁)
- 认证(伪装,指的是伪装成通信双方,以成功获取对象的认证)
-
不可否认性(否认,是指事后不承认是自己发送的)
-
常用的加密算法
最常用的加密算法用如下几种:
MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \RSA \ IDEA \ DSA \ AES -
加密算法的选择
一般公司都会有一套自己的加密方案,按照公司接口文档的规定去加密
常见的加密算法
-
Base64编码
-
简单说明
- HTTP将Base64编码用于基本的认证和摘要认证
- 其可以方便的将用户的任何输入转换成只包含特定字符的安全格式,服务于网络通信过程
- Base64可以成为密码学的基石,非常重要。
-
特点:
- 可以将任意的二进制数据进行Base64编码
- 所有的数据都能被编码为,只用65个字符就能表示的文本文件。
- 编码后的65个字符包括 : A~Z a~z 0~9 + / =
- 对文件进行base64编码后文件数据的变化:编码后的数据 约等于 编码前数据的4/3,会比原始的数据大1/3(33%)左右。
- 能够进行逆运算
- 不够安全,但却被很多加密算法作为编码格式
-
-
通过"终端命令行"实现Base64编码和解码
编码:base64 123.png -o 123.txt
解码:base64 123.txt -o test.png -D
- Base64编码原理
1)将所有字符转化为ASCII码;
2)将ASCII码转化为8位二进制;
3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;
4)统一在6位二进制前补两个0凑足8位;
5)将补0后的二进制转为十进制;
6)从Base64编码表获取十进制对应的Base64编码;
- 处理过程
a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
b.数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
c.不断进行,直到全部输入数据转换完成。
d.如果最后剩下两个输入数据,在编码结果后加1个“=”;
e.如果最后剩下一个输入数据,编码结果后加2个“=”;
f.如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
-
编码&解码方式
编码- 编码方式一 : 通过将给定的字符串转换成二进制数据后进行Base64编码,输出的编码结果是一个二进制数据
方法 :-(NSData*)base64EncodedDataWithOptions(NSDataBase64EncodingOptions);
返回的是NSData
- 编码方式一 : 通过将给定的字符串转换成二进制数据后进行Base64编码,输出的编码结果是一个二进制数据
-(NSString *)base64Encodeing1:(NSString *)string
{
//将字符串转换成二进制
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
//对二进制数据进行base64编码
NSData * codeData = [data base64EncodedDataWithOptions:0];
//将编码后的二进制数据转换成字符串后输出
return [[NSString alloc] initWithData:codeDataencoding:NSUTF8StringEncoding];
}
- 编码方式二 : 将给定的字符串转换成二进制后,进行Base64编码,输出的编码结果是字符串
- (NSString *)base64EncodedStringWithOptions(NSDataBase64EncodingOptions);
返回的是NSString
-(NSString *)base64Encodeing2:(NSString *)string
{
//将字符串转换成二进制
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
//将二进制数据通过base64编译成字符串
return [data base64EncodedStringWithOptions:0];
}
解码
- 解码方式一 : 通过将经过Base64编码后的字符串转换成二进制数据后,进行解码
-(nullable instancetype)initWithBase64EncodedData:(NSData *)base64Data options:(NSDataBase64DecodingOptions);
上边的方法是NSData的方法,通过一个二进制数据,返回的实例对象是NSData对象
-(NSString *)base64Decodeing1:(NSString *)string
{
//将字符串转换成二进制
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
//将二进制数据通过base64进行解码
NSData * deCode = [[NSData alloc] initWithBase64EncodedData:data options:0];
//将解码 后的二进制数据转换成字符串
return [[NSString alloc] initWithData:deCode encoding:NSUTF8StringEncoding];
}
- 解码方式二 : 直接将经过Base64编码后的字符串进行解码
-(nullable instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions);
上边的方法是NSData的方法,通过一个字符串,返回一个实例对象是NSData的对象
-(NSString *)base64Decodeing2:(NSString *)string
{
//解码字符串,并转换成二进制数据
NSData * deCodeData = [[NSData alloc] initWithBase64EncodedString:string options:0];
//将解码后的二进制数据,转换成字符串,并返回
return [[NSString alloc] initWithData:deCodeData encoding:NSUTF8StringEncoding];
}
常见的其他加密算法
-
常见的加密算法
- 消息摘要(单向散列函数)包括:MD5 \ SHA1 \ SHA256 \ SHA512等
- 消息认证 包括 : HMAC-MD5 \ HMAC-SHA1
- 对称加密 包括 : DES \ 3DES \ AES(高级加密标准)
- 非对称加密 包括 : RSA
- 数字签名
- 证书等