Hash&对称加密

2020-04-18  本文已影响0人  coder_feng

Hash的特点

Hash用途

密码加密

对称加密

对称加密方式:明文通过密钥加密得到密文,密文通过密钥解密得到明文
常见算法

应用模式

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 对称加密算法的核心函数(负责加密解密)

现在模拟一下安全测试隐患,在xcode中设置Symbolic BreakPoint断点CCCrypt,如下图所示 Snip20200422_12.png
然后运行项目,会发现项目停留在 Snip20200422_13.png
这个时候,通过终端界面,打印出相关值情况 Snip20200422_15.png
可以看到,别人可以通过逆向hook住某个方法,然后就可以将我的加密内容给打印出来,针对这个问题,我们可以在加密之前先对我们要加密的字符串进行一些处理,例如异或呀,md5,HMAC + 时间戳等处理,然后再传递进去,这样的话,就可以降低我们的安全隐患.

总结

上一篇下一篇

猜你喜欢

热点阅读