密码学

ssh :secure shell
加密:
    1. 对称加密 (加密密钥与解密密钥相同)
        des 、aes
    2. 非对称加密(加密密钥与解密密钥不同)
        RSA :公钥、私钥 
数字摘要:
    md5 \sha1

密码学

Base64编码,将任意二进制数据进行编码,有65中字符组成的文本(0-9、a-z、A-Z、+/=)

  • 6个二进制位为单位,最后用=来补齐
  • 所有数据都可以编码、图片也可以
  • base64 123.txt -o abc.txt
  • base64 abc.txt -o 234.txt -D
  • 给字符串加密 echo hello| base64
  • echo YW5nbGltdUAxNjMuY29tCg==|base64 -D
/** 字符串,进行base64编码 */
- (NSString *)base64Encode:(NSString *)string
{
    // 1.将字符串转成 二进制
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    // 2.返回base64编码
    return [data base64EncodedStringWithOptions:0];
}

/** 给我一个base64编码,解码 */
- (NSString *)base64Decode:(NSString *)string
{
    // 1.将base64编码后的字符串,转换成 二进制
    NSData *data = [[NSData alloc] initWithBase64EncodedString:string options:0];
    // 2.返回字符串
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
----------------------------------------------
NSLog(@"%@", [self base64Encode:@"haha"]);
// aGFoYQ==
NSLog(@"%@", [self base64Decode:@"aGFoYQ=="]);
// haha

位运算:与、或、非、异或(简单的加密)

  • 很多数据就是简单的异或!

密码学

上世纪70年代现代密码学——非对称加密算法 RSA(网络)

  • 私钥加密,公钥解密
  • 公钥加密,私钥解密

对称加密(本地)

  • 用什么来加密的,就用什么解密
  • DES、3DES、AES(高级密码标准,美国安全局使用)
    • 明文→密钥→密文
    • 密文→密钥→明文



哈希(散列)函数

  • MD5:32个字符,不管原始数据有多大,不可逆
    • 对相同数据加密一样、不同数据加密结果不一样
    • 信息摘要,只是信息的一部分(信息指纹!)
    • 这个指纹是张三的,不可能拿这个指纹把张三变出来
  • 可以反查询MD5解密网站,直接MD5加密就不安全了
  • 加盐,所有地方都有保持一致,pc\android\ios,还是有安全问题
  • HMAC加密:给定密钥对明文进行加密,做2次散列!得到结果也是32位(去反查询基本查不到)
// 直接md5太简单
//    pwd = pwd.md5String;
//    pwd = [pwd stringByAppendingString:salt].md5String;
pwd = [pwd hmacSHA1StringWithKey:@"helen"];
    
// 登陆
[self sendUserId:uid withPwd:pwd];
  • 实际开发中,密钥来自服务器!一个账号!对应一个密钥
  • 泄露只影响一个用户的
  • 指纹人脸是手机的主人,密码是账号的主人,手机绑定了账号所以能支费用

哈希(散列)函数应用

  • 文件识别、加密
    • 文件名、后缀,本身和文件没有关系,只是告诉操作系统的,改了名字它hash值还是不变,网站识别防止重复上传
    • 可以压缩文件,文件的二进制发生变化,hash值也改变
    • 拆词搜索,哈希求和,顺序不同结果相同

你可能感兴趣的:(密码学)