数据安全及加密算法对比

本文探讨了数据安全的重要性,分析了各种加密算法,包括Base64编码、单项散列函数(MD5、SHA系列)、消息认证码(HMAC)、对称加密(DES、3DES、AES)和非对称加密(RSA)。还讨论了加密过程中的安全问题,如中间人攻击,以及如何通过数字签名和证书来提高安全性。最后提到了加密在实际应用中的挑战和改进方法。
摘要由CSDN通过智能技术生成

平时开发中不仅会遇到各种需要保护用户隐私的情况,而且还有可能需要对公司核心数据进行保护,这时候加密隐私数据就成为了必要。然而市场上存在着各种各样的抓包工具及解密算法,甚至一些公司有专门的逆向部门,这就加大了数据安全的风险,本文将通过以下几个方面对各种加密算法进行分析对比:


  • Base64编码(基础)

  • 单项散列函数 MD5、SHA1、SHA256、SHA512等

  • 消息认证码 HMAC-MD5、HMAC-SHA1

  • 对称加密 DES|3DES|AES(高级加密标准)

  • 非对称加密 RSA

  • 数字签名

  • 证书


通常我们对消息进行加解密有两种处理方式:


  1. 只需要保存一个值,保证该值得机密性,不需要知道原文(用户登录)

  2. 除了保证机密性外还需要对加密后的值进行解密得到原文


Base64编码


由于我们可能对各种各样的数据进行加密,比如:视频、音频、文本文件等,所以加密之前我们需要统一文件类型,然后再进行加密处理。


  • Base64编码

// 要编码的字符串
NSString *str = @"haha";

// 转换成二进制文件
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

// 进行base64编码
NSString *dataStr = [data base64EncodedStringWithOptions:kNilOptions];

NSLog(@"%@", dataStr);


  • Base64解码

// 先对数据进行解码
NSData *encData = [[NSData alloc]initWithBase64EncodedString:dataStr options:kNilOptions];
   
// 将二进制数据转换成字符串
NSString *encStr = [[NSString alloc]initWithData:encData encoding:NSUTF8StringEncoding];
   
NSLog(@"%@", encStr);


接下来分析一下Base64的编码过程,参考维基百科:



如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。


也就是说,当最后剩余两个八位字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:



  • Base64编码原理


  1. 将所有字符串转换成ASCII码

  2. 将ASCII码转换成8位二进制

  3. 将二进制三位归成一组(不足三位在后边补0),再按每组6位,拆成若干组

  4. 统一在6位二进制后不足8位的补0

  5. 将补0后的二进制转换成十进制

  6. 从Base64编码表取出十进制对应的Base64编码


若原数据长度不是3的倍数时且剩下1个输入数据,则在编码结果后加2个=;若剩下2个输入数据,则在编码结果后加1个=


如上面的例子:


原数据为A,数据长度为1,1 % 3 = 1 后面加两个==


原数据为bc,数据长度为2,2 % 3 = 2 后面加一个=


  • Base64编码的特点


  1. 可以将任意的二进制数据进行Base64编码。

  2. 所有的数据都能被编码为并只用65个字符就能表示的文本文件。

  3. 编码后的65个字符包括AZ,az,0~9,+,/,=

  4. 对文件或字符串进行Base64编码后将比原始大小增加33%。

  5. 能够逆运算

  6. 不够安全,但却被很多加密算法作为编码方式


单项散列函数


单向散列函数也称为消息摘要函数、哈希函数或者杂凑函数。

单向散列函数输出的散列值又称为消息摘要或者指纹


特点:


  1. 对任意长度的消息散列得到散列值是定长的

  2. 散列计算速度快,非常高效

  3. 消息不同,则散列值一定不同

  4. 消息相同,则散列值一定相同

  5. 具备单向性,无法逆推计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值