美文网首页
iOS 对称加密算法

iOS 对称加密算法

作者: MrSYLong | 来源:发表于2019-10-24 09:00 被阅读0次
简介

对称加密算法又称传统加密算法。
加密和解密使用同一个密钥。

对称加密算法示例

密钥:X
加密算法:每个字符+X
明文:Hello
密钥为 1时加密结果:Ifmmp
密钥为 2时加密结果:Jgnnq

优缺点

算法公开,计算量小,加密速度快,加密效率高
双方使用相同的钥匙,安全性得不到保证

注意事项

密钥的保密工作非常重要
密钥要求定期更换

经典加密算法

DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)

3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)

AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。

加密模式(最常用两种)

ECB:电子密码本,就是每个块都是独立加密的。

image

CBC:密码分组链接,使用一个密钥和一个初始化向量(IV)对数据执行加密转换。

image

只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。

核心函数
 /***
     CCCrypt 对称加密算法的核心函数(加密/解密)
     参数:
     1.kCCEncrypt  加密/kCCDecrypt 解密
     2.加密算法,默认使用的是  AES/DES
     3.加密选项  ECB/CBC
         kCCOptionPKCS7Padding                      CBC 的加密方式 并 使用PKCS7Padding的填充模式
         kCCOptionPKCS7Padding | kCCOptionECBMode   ECB 的加密方式 并 使用PKCS7Padding的填充模式
         注:经查资料 AES算法下 PKCS5Padding 与 PKCS7Padding  兼容或相同,DES/3DES算法下 PKCS5Padding 等价与 PKCS7Padding 
                               
     4.加密密钥
     5.密钥长度
     6.iv 初始化向量,ECB 不需要指定
     7.加密的数据
     8.加密的数据的长度
     9.密文的内存地址
     10.密文缓冲区的大小
     11.加密结果大小
     */
/*!
    @function   CCCrypt
    @abstract   一个接口来处理加密解密方式.
                还可以使用方式二:下面会有示例说明 ,调用流程分几步 ,CCCrytorCreate(),
                CCCryptorUpdate(), CCCryptorFinal(), and CCCryptorRelease().

    @param      op              操作类型解密或解密: kCCEncrypt or
                    kCCDecrypt.
    
    @param      alg             加解密使用的算法.
    
    @param      options         填充方式式通常是kCCOptionPKCS7Padding,默认分组模式cbc,.
    
    @param      key             密钥. 
    
    @param      keyLength       密钥长度.
    
    @param      iv              加密使用的向量参数,cbc模式需要,16个字节,ecb模式不需要,. 
    
    @param      dataIn          输入的数据. 
    
    @param      dataInLength    输入的数据长度.
    
    @param      dataOut         输出的数据. 
    
    @param      dataOutAvailable 输出数据时需要的可用空间大小.  
    
    @param      dataOutMoved    成功之后实际占用的空间大小. 
        
    @result     结果在为CCCryptorStatus 枚举
 */
    
CCCryptorStatus CCCrypt(
    CCOperation op,         /* kCCEncrypt, 等. */
    CCAlgorithm alg,        /* kCCAlgorithmAES128, 等. */
    CCOptions options,      /* kCCOptionPKCS7Padding, 等. */
    const void *key,
    size_t keyLength,
    const void *iv,         /* 可选的向量 */
    const void *dataIn,     /*输入*/
    size_t dataInLength,
    void *dataOut,          /* 输出 */
    size_t dataOutAvailable,
    size_t *dataOutMoved)

补充:
PKCS5Padding是PKCS7Padding的子集,填充值的算法都是一样的
PKCS5Padding:Block size必须是8个字节,
PKCS7Padding:Block size可以在1-255之间

参考

iOS中的对称加密算法
iOS加解密最重要的干货:CCCrypt

相关文章

网友评论

      本文标题:iOS 对称加密算法

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