对称加密

  • 对称加密的特点
    1)加密/解密使用相同的密钥
    2)加密和解密的过程是可逆的(明文->密文->明文)
    对称加密_第1张图片
    对称加密和解密
  • 缺点
    无法保证密钥传输过程的安全问题
  • 经典算法
    1)DES 数据加密标准
    2)3DES 使用3个密钥,对消息进行(密钥1·加密)+(密钥2·解密)+(密钥3·加密)
    3)AES 高级加密标准
  • 对称加密的密码算法
    密码算法可以分为分组密码流密码两种
    分组密码 :每次只能处理特定长度的一zu数据的一类密码算法。一个分组的比特数量就称之为分组长度。
    例如:
    DES和3DES的分组长度都是64比特。即每次只能加密64比特的明文,并生成64比特的密文。
    AES的分组长度有128比特、192比特和256比特可以选择。
    流密码 :对数据流进行连续处理的一类算法。
    流密码中一般以1比特、8比特或者是32比特等作为单位俩进行加密和解密。
  • ECB分组模式
    ECB模式的全称为Electronic CodeBook模式。又成为电子密码本模式,每个块都是独立加密的。
    特点:
    1)使用ECB模式加密的时候,相同的明文分组 会被转换为 相同的密文分组
    2)类似于一个巨大的明文分组->密文分组的对照表。
对称加密_第2张图片
ECB分组模式的加密和解密
  • 终端测试命令
    加密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.txt -out 123.bin
    解密 $ openssl enc -des-ecb -K 616263 -nosalt -in 123.bin -out 1231.txt -d

  • CBC分组模式
    CBC模式全称为Cipher Block Chainning模式(密文分组链接模式|电子密码链条),使用一个密钥和一个初始化向量 (IV)对数据执行加密转换,可以有效地保证密文的完整性
    特点:在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。

对称加密_第3张图片
CBC分组模式的加密和解密
  • 终端测试命令
    加密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.txt -out a.bin
    解密 $ openssl enc -des-cbc -K 616263 -iv 0102030405060708 -nosalt -in a.bin -out a1.txt -d

  • 示例代码:
    **注意 : **
    1> 加密过程是先加密,再base64编码
    2> 解密过程是先base64解码,再解密
    AES(高级加密标准,默认128位)-ECB 加密&解密

    NSString * string = @"handsome";
    NSString * key = @"cute";
    //加密
/*
     第一个参数:要加密的明文(字符串)
     第二个参数:共享密钥
     第三个参数:nil (初始向量)
     */
    NSString * encodeStr = [[EncryptionTools sharedEncryptionTools] encryptString:string keyString:key iv:nil];
    NSLog(@"%@",encodeStr);
    //解密
    NSString * decodeStr = [[EncryptionTools sharedEncryptionTools] decryptString:encodeStr keyString:key iv:nil];
    NSLog(@"%@",decodeStr);

AES(高级加密标准,默认128位)-CBC 加密&解密

    //加密
    uint8_t iv[8] = {'a','c','d','e','f','g','h'};
    NSData * data = [NSData dataWithBytes:iv length:sizeof(iv)];
    NSString * encodeStr1 = [[EncryptionTools sharedEncryptionTools] encryptString:string keyString:key iv:data];
    NSLog(@"%@",encodeStr1);
    //解密
    NSString * decodeStr1 = [[EncryptionTools sharedEncryptionTools] decryptString:encodeStr1 keyString:key iv:data];
    NSLog(@"%@",decodeStr1);
    ```
**DES(数据加密标准)-ECB 加密&解密**
    ```
    //注意,如果想要通过DES的方式进行加密,解密,需要修改加密方式
//修改加密方式为DES
    EncryptionTools * encry = [EncryptionTools sharedEncryptionTools];
    encry.algorithm = kCCAlgorithmDES;
//加密
    NSString * encodeStr2 = [[EncryptionTools sharedEncryptionTools] encryptString:string keyString:key iv:nil];
    NSLog(@"%@",encodeStr2);
//解密
    NSString * decodeStr2 = [[EncryptionTools sharedEncryptionTools] decryptString:encodeStr2 keyString:key iv:nil];
    NSLog(@"%@",decodeStr2);

DES(数据加密标准)-CBC 加密&解密

DES-CBC的加密和解密方式参见AES-CBC的加密和解密,不过在加密或者解密之前,先要修改加密方式为DES
    EncryptionTools * encry = [EncryptionTools sharedEncryptionTools];
    encry.algorithm = kCCAlgorithmDES;

你可能感兴趣的:(对称加密)