iOS development_Data encryption security protection

  • Hash (hash) algorithm
    : MD5 SHA256/512
    algorithm public The result of
    different data encryption is a fixed-length MD5 32 characters!
    Data "fingerprint", it is only a
    part of the data irreversible, but the same data MD5 value is the same
    Hash collision: different data get the same HASH value! !

Under development, client development, password encryption! The server does not know the user's password! So now there is no "recover password" function, only reset password!

  • Symmetric: AES DES 3DES
    : Plaintext—"Key—"Ciphertext
    : Ciphertext—"Key—"Plaintext

  • Asymmetric: RSA
    : public key encryption, private key decryption
    : private key encryption, public key decryption

In terms of business logic, asymmetric encryption is relatively safer than symmetric encryption, but the efficiency is not high. The use of encryption of large amounts of data is not recommended, but only key data is used.

#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。
     */

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324778218&siteId=291194637