iOS开发_数据加密安全防护

  • 散列(哈希)算法
    :MD5 SHA256/512
    算法公开
    不同的数据加密之后的结果是定长度的 MD5 32个字符!
    数据“指纹”,它只是数据的一部分
    不可逆,但是同样的数据 MD5值是一样的
    散列碰撞:不同的数据得到了同样的HASH值!!

开发中,客户端开发,密码加密!服务器不知道用户的密码!所以现在没有“找回密码”的功能,只有重置密码!

  • 对称:AES DES 3DES
    :明文—》密钥—》密文
    :密文—》密钥—》明文

  • 非对称:RSA
    : 公钥加密,私钥解密
    : 私钥加密,公钥解密

从业务逻辑来讲,非对称加密要比对称加密要相对安全,但是效率不高,不提倡大量数据的加密的使用,而仅仅对关键数据进行使用。

#import "ViewController.h"
#import "NSString+Hash.h"

@interface ViewController ()

@end

@implementation ViewController

//盐
static NSString * salt =@"*DJSF(*QYEWOIOAJ()*)ASDASDASD";

- (void)viewDidLoad {
    [super viewDidLoad];
    //发给服务器校验!
    NSString * pwd =@"123456";
//    pwd=[pwd stringByAppendingString:salt];
//    pwd=pwd.md5String;
    //加密!直接MD5加密

    //直接发送给服务端pwd可以嘛?
    //答案是不可以,因为虽然MD5是不可逆的,但是一些简单的密码转换成哈希值之后是固定的,有大量的网站依然可以匹配出你加密后的哈希,然后找到你的原密码。那有没有方法解决呢?我们可以进行“加盐”

    //如果盐被泄露呢?那就严重了,所以肯定不能使用固定的盐
    //我们尝试另一种方式:HMAC
    pwd =[pwd hmacSHA1StringWithKey:@"hank"];
    //(HMAC密码+服务器时间戳+盐(服务器和客户端商议))md5
    //服务端存储用户名 key HMAC密码
    //服务端验证:1.(HMAC密码+服务器时间戳(时间戳只到分钟)+key(服务器和客户端商议)MD5
    //2.(HMAC密码+服务器时间戳(上1分钟)+key(服务器和客户端商议)MD5
     NSLog(@"加密之后:%@",pwd);

    /*
     非对称加密算法
     一.运行终端,生成私钥
     1.cd /Users/mac/Desktop/iOS/加密
     2.openssl genrsa -out private.pem 512 //生成私钥,注意:这个私钥其实是放在服务器的
     3.openssl rsa -in private.pem -out public.pem -pubout //通过2生成的私钥获取公钥
     4.我们会发现已经在加密文件下,创建成功了两个文件
     5.cat private.pem  //打开私钥,可以看见base64编码的文件格式
     6. openssl rsa -in private.pem -text -out private.txt  //转换成明文格式打开看看
     RSA加密使用效率偏低,它有哪些应用场景呢?
     我们都知道私钥是放在服务端的,公钥是在客户端的。何为公钥?公钥可以理解为公共钥匙,任何客户端都可以向服务器获取公钥。当你的项目在被做逆向的时候,其他人就可以模仿客户端来获取公钥,所以没有绝对的安全,只有相对的安全。因此我们的重要数据仍然需要做加密处理。我们知道OC的方法调用和函数调用是不一样的,方法调用可以显示方法名,而函数调用则返回的是内存地址。所以在大公司中,一些核心算法都是使用的C。
     */

}

猜你喜欢

转载自blog.csdn.net/wtdask/article/details/80068302