zoukankan      html  css  js  c++  java
  • 密码学介绍

    密码学介绍

    密码学分类

    • 密码编码学
    • 密码使用学
    • 密码分析学

    网络开发准则

    • 1.在网络开发中不允许传输用户明文隐私数据
    • 2.在本地不允许保存用户的明文隐私数据

    加密算法

    • 哈希(散列)函数
    • MD5
    • SHA1
    • SHA256/512

    对称加密算法

    加密&解密都是使用一个密钥

    • DES 数据加密标准
    • 3DES (使用3个密钥,对相同的数据来加密3次,增强加密强度)
    • AES(高级加密 苹果的钥匙串访问也是用的AES)

    非对称加密算法

    -用公钥加密,私钥解密
    -用私钥加密,公钥解密

    • RSA
    特点
    1.算法公开 
    2.对于相同的数据加密,得到的结果是一样的
    3.得到的结果都是定长的32位
    

    MD5用途:

    1.密码:(服务器不需要知道用户的真实密码,数据库保存的是加密密码)
    2.搜索

    iOS 进阶 执行终端命令:md5 -s "iOS"
    iOS :MD5 ("iOS") = 1bdf605991920db11cbdf8508204c4eb
    进阶:MD5 ("进阶") = fa11f8c07c1629d5f0ab1cfecdf1f686
    

    3.版权

    MD5 ("123.png") = 812749e1a307f38fd0a88b54bea55ff2
    MD5 ("456.png") = 9ef5055324e69f335d69b27ea40d2202
    

    4.文件完整性校验

    A:下载文件校验:下载前服务端给你MD5和下载后你自己进行加密的MD5值进行校验,如果一样就是完整的;否则文件有可能不可用
    B: 上传:(断点续传)上传MD5和文件上传完生成的MD5值是否一样
    

    SSKeyChain使用

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        //加载用户信息:
        [self loadUserInfo];
    }
    - (void)loadUserInfo {
       //加载账号
        self.userTF.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"CCLoginUserName"];
        NSLog(@"%@",[SSKeychain allAccounts]);
        self.pwdTF.text = [SSKeychain passwordForService:CCLoginServiceName account:self.userTF.text];
    }
    - (IBAction)login:(id)sender {
        NSLog(@"登录点击了");
        //1发送请求给服务器一一认证
        NSString * userId = self.userTF.text;
        NSString * pwd = self.pwdTF.text;
        //1.MD5加密
        //pwd = pwd.md5String;//202cb962ac59075b964b07152d234b70
        
        //2.MD5 加盐
        //固定的盐有人知道
        //pwd = [pwd stringByAppendingString:salt].md5String;//561dc6ca5c2dfba14477f2114eaf62bc
        
        //3.--HMAC---
        //在实际开发中,秘钥来自于服务器,注册的时候
        NSString * key = nil;
        if (key==nil) {
            //1.发送网络请求获取秘钥
            key = [self getKeyWithAccount:userId];
            //2.展示小菊花
            //3.展示你等待授权页面
            //获取成功-》登录
            
            //立刻保存在本地--- 钥匙串
            if (key.length>0 ) {
                [SSKeychain setPassword:key forService:CCKeyServiceName account:userId];
            }
            
        }
        pwd = [pwd hmacMD5StringWithKey:key];
        NSLog(@"现在的密码是:%@",pwd);
        if ([self isLoginWithUserId:userId Password:pwd]) {
            [self savePwdWithAccount:userId pwd:self.pwdTF.text];
            NSLog(@"登录成功!");
        }else {
            NSLog(@"登录失败!");
        }
    }
    - (void)savePwdWithAccount:(NSString*)account pwd:(NSString*)pwd {
        //1.保存账号
        [[NSUserDefaults standardUserDefaults] setObject:account forKey:@"CCLoginUserName"];
        //2.同步--立马马上给我同步
        [[NSUserDefaults standardUserDefaults] synchronize];
        
        //保存密码
        if (account.length > 0 && pwd.length > 0) {
            [SSKeychain setPassword:pwd forService:CCLoginServiceName account:account];
        }
    }
    - (NSString*)getKeyWithAccount:(NSString*)count {
        
        //1.需要授权
        //2.直接返回秘钥
        NSString * key = [SSKeychain passwordForService:CCKeyServiceName account:self.userTF.text];
        NSLog(@"key===>%@",key);
        if (key == NULL) {
            return @"小cc";//正式应该重新向服务端请求
        }else {
            return key;
        }
    
    }
    - (BOOL)isLoginWithUserId:(NSString*)userId Password:(NSString*)pwd {
        if ([userId isEqualToString:@"CC"] && [pwd isEqualToString:@"59016b26db85306b00a413fb0d4e2209"]) {
            return YES;
        }else {
            return NO;
        }
        
    }
    

    小结:

    对称加密算法

    加密/解密使用相同的秘钥; 秘钥的保管十分重要

    • ECB:电子密码本,每个块都是独立加密的
    加密:$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin
    解密:$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.bin -out msg1.txt -d
    查看加密后的二进制文件:$ xxd msg1.bin 
    
    • CBC:密码块链,使用一个密钥和一个初始化向量对数据执行加密转换,可以有效地保证密文的完整性
    加密:$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in a.txt -out msg1.bin
    解密:$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.bin -out msg4.txt -d
    查看加密后的二进制文件:$ xxd msg1.bin 
    

    非对称加密算法:RSA

    OpenSSL生成秘钥
    RSA算法有两个作用一个是加密一个是数字签名。

    生成秘钥:$ openssl genrsa -out ca.key 1024
    
  • 相关阅读:
    有序数组(类模板)
    BUUCTF-Web Comment
    BUUCTF-web NiZhuanSiWei
    2020数字中国创新大赛虎符网络安全赛道-pwn count
    BUUCTF-Web Easy Calc
    xctf-web fakebook
    xctf-web supersqli
    xctf-pwn pwn200
    xctf-pwn level3
    利用updatexml()报错注入mysql
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/10369724.html
Copyright © 2011-2022 走看看