Hash & 对称加密

2021-01-03  本文已影响0人  崔希羽

Hash一般译为“散列”,也有直接音译为“哈希”,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

Hash的特点

Hash的用途

在实际应用中,不能直接使用MD5,如果直接使用的话,很可能会被破解,如网站cmd5通过穷举字符组合进行反向查询。所以我们在应用的时候可以使用一些手段,如HMAC方案,通过加key、时间戳等手段进行二次hash运算。


对称密钥加密
又称为对称加密、私钥加密、共享密钥加密。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。常见的对称加密算法有AES("高级加密标准")、ChaCha20、3DES、Salsa20、DES("数据加密标准")、Blowfish、IDEA( "国际资料加密算法")、RC5、RC6、Camellia。对称加密的速度比公钥加密快很多,在很多场合都需要对称加密。

对称加密有两种不同的应用模式:

使用openssl加解密


OC代码使用
引入头文件#import <CommonCrypto/CommonCrypto.h>,加解密都是使用同一个方法

    /*参数说明
     1、kCCEncrypt 加密/kCCDecrypt 解密
     2、加密算法。
     3、加密选项:ECB/CBC,iv存在使用kCCOptionPKCS7Padding,不存在使用kCCOptionPKCS7Padding | kCCOptionECBMode
     4、加密的密钥
     5、密钥的长度
     6、iv 初始化向量
     7、加密的数据
     8、加密的数据长度
     9、密文的内存地址
     10、密文缓冲区的大小
     11、加密结果大小
    */
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));
上一篇 下一篇

猜你喜欢

热点阅读