美文网首页
Hash&对称加密

Hash&对称加密

作者: coder_feng | 来源:发表于2020-04-18 11:54 被阅读0次

Hash的特点

  • 算法是公开的
  • 对相同数据运算,得到的结果是一样的
  • 对不同数据运算,如MD5得到的结果默认是128位,32个字符(16进制标识)
  • 无法逆运算
  • 信息摘要,信息指纹,是用来做数据识别的

Hash用途

  • 用户密码的加密
  • 用户引擎
  • 版权
  • 数字签名

密码加密

  • 直接使用MD5
  • MD5加盐
  • HMAC加密方案
  • 添点东西

对称加密

对称加密方式:明文通过密钥加密得到密文,密文通过密钥解密得到明文
常见算法
  • DES 数据加密标准(用得少,因为强度不够)
  • 3DES 使用3个密钥,对相同的数据执行3次加密,强度增强
  • AES 高级密码标准

应用模式

  • ECB(Electronic Code Book):电子密码本模式,每一块数据,独立加密,是最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况很少使用

  • CBC(Cipher Block Chaining):密码分组链接模式,使用一个密钥和一个初始化向量[IV]对数据进行加密,明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始化向量,相同的密文加密后悔形成不同的密文,这是目前应用最广泛的模式,CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误),另外CBC可以有效的保证密文的完整性,如果一个数据块在传递是丢失或改变,后面的数据将无法正常解密。

OpenSSL 操作

AES (ECB)加密 "hello" 字符串

echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64

AES(CBC)加密"hello"字符串

echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64

解密:

AES(ESC)解密

echo -n d1QG4T2tivoOKiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d

AES(CBC)解密
···
echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc-iv 0102030405060708 -K 616263 -nosalt -d
···

安全隐患

 /** AES - ECB */
    NSString * key = @"abc";
    NSString * encStr = [[EncryptionTools sharedEncryptionTools] encryptString:@"hello" keyString:key iv:nil];
    
    NSLog(@"加密的结果是:%@",encStr);
    
    NSLog(@"解密的结果是:%@",[[EncryptionTools sharedEncryptionTools] decryptString:encStr keyString:key iv:nil]);
    
    /** AES - CBC 加密 */
    uint8_t iv[8] = {1,2,3,4,5,6,7,8};
    NSData * ivData = [NSData dataWithBytes:iv length:sizeof(iv)];
    
    
    
    NSLog(@"CBC加密:%@",[[EncryptionTools sharedEncryptionTools] encryptString:@"hello" keyString:@"abc" iv:ivData]);
    
    NSLog(@"解密:%@",[[EncryptionTools sharedEncryptionTools] decryptString:@"u3W/N816uzFpcg6pZ+kbdg==" keyString:key iv:ivData]);

这两种加密,底层使用的都是CCCrypt 这个方法

CCCryptorStatus CCCrypt(
    CCOperation op,         /* kCCEncrypt, etc. */
    CCAlgorithm alg,        /* kCCAlgorithmAES128, etc. */
    CCOptions options,      /* kCCOptionPKCS7Padding, etc. */
    const void *key,
    size_t keyLength,
    const void *iv,         /* optional initialization vector */
    const void *dataIn,     /* optional per op and alg */
    size_t dataInLength,
    void *dataOut,          /* data RETURNED here */
    size_t dataOutAvailable,
    size_t *dataOutMoved)
    API_AVAILABLE(macos(10.4), ios(2.0));

CCCrypt 对称加密算法的核心函数(负责加密解密)

  • 参数1.kCCEncrypt 加密/kCCDecrypt解密
  • 参数2.加密算法,默认的AES/DES
  • 参数3:加密方式的选项 kCCOptionPKCS7Padding | kCCOptionECBMode;//ECB 加密! kCCOptionPKCS7Padding;//CBC加密
  • 参数4.加密密钥
  • 参数5.密钥长度
  • 参数6.iv初始化向量,ECB不需要指定
  • 参数7.加密的数据
  • 参数8.加密的数据长度
  • 参数9.缓冲区(地址).存放密文的
  • 参数10.缓冲区的大小
  • 参数11.加密结果大小
现在模拟一下安全测试隐患,在xcode中设置Symbolic BreakPoint断点CCCrypt,如下图所示 Snip20200422_12.png
然后运行项目,会发现项目停留在 Snip20200422_13.png
这个时候,通过终端界面,打印出相关值情况 Snip20200422_15.png
可以看到,别人可以通过逆向hook住某个方法,然后就可以将我的加密内容给打印出来,针对这个问题,我们可以在加密之前先对我们要加密的字符串进行一些处理,例如异或呀,md5,HMAC + 时间戳等处理,然后再传递进去,这样的话,就可以降低我们的安全隐患.

总结

  • Hash
    • 特点
      • 算法公开
      • 相同的数据加密结果不变,不同的数据加密结果定长
      • 不可逆
    • HASH用途
      • 密码加密:服务器不需要知道用户真实密码,只需要匹配HASH值
        • 直接MD5,轻易反查询
        • 加盐,不要使用定盐
        • HAMC加密方案:通过动态KEY来加密数据
        • 加时间戳的方式,更加灵活,可以保证加密的结果每次不同
    • 数字签名
      • 原始数据进行HASH
      • 使用RSA加密HASH值(这部分数据就是原始数据的签名信息)
      • 将原始数据+数字签名,一起发给服务器验证
  • 对称加密算法
    • 两种加密方式
      • ECB:电子密码本,每一块数据独立加密
      • CBC: 链式加密,每一块数据加密都依赖上一块数据。有效的保证数据的完整性
  • CCrypt函数:直接使用会有安全隐患

相关文章

  • HASH&对称加密

    1、非对称加密(现代加密算法):RSA(不适合加密大数据)2、对称加密(传统加密算法):DES、3DES、AES;...

  • Hash&对称加密

    Hash的特点 算法是公开的 对相同数据运算,得到的结果是一样的 对不同数据运算,如MD5得到的结果默认是128位...

  • 密码学--HASH&对称加密

    HASH概述 Hash,一般翻译做"散列",也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长...

  • https交互流程简述

    https使用到的加密算法 对称加密非对称加密 通过非对称加密,交换对称加密的密钥,之后采用对称加密传输非对称加密...

  • Web开发必须了解的密码学技术

    对称加密与非对称加密 按照密钥的使用形式,加密算法可以分为对称加密和非对称加密(又叫公钥加密)。对称加密在加密和解...

  • 加密算法的应用

    加密算法的应用 [TOC] 加密算法 加密算法主要分为对称加密和非对称加密。 对称加密 对称加密采用了对称密码编码...

  • 学习笔记:HTTPS协议原理

    对称加密和非对称加密 加密分两种,对称加密和非对称加密。对称加密是指加密的双方使用同一个密钥加密和解密数据。非对称...

  • iOS逆向-密码学(Hash&对称加密)

    概述 Hash,一般翻译做‘散列’,也有直接音译为‘哈希’的,就是把任意长度的输入通过散列算法变换成固定长度的输出...

  • Linux系列五之SSH原理深度解析

    一、对称加密和非对称加密 为了理解SSH,先要介绍两个重要概念:对称加密和非对称加密。 1-1、对称加密 所谓对称...

  • https传输过程

    HTTPS传输过程主要涉及到对称加密和非对称加密两种方式,对称加密用来加密数据内容,非对称加密用来加密对称加密的秘...

网友评论

      本文标题:Hash&对称加密

      本文链接:https://www.haomeiwen.com/subject/xghyvhtx.html