-
对称加密的特点
1)加密/解密使用相同的密钥
2)加密和解密的过程是可逆的(明文->密文->明文)
对称加密和解密 -
缺点
无法保证密钥传输过程的安全问题 -
经典算法
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)类似于一个巨大的明文分组->密文分组的对照表。
-
终端测试命令
加密 $ 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运算,然后再进行加密。
-
终端测试命令
加密 $ 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;
网友评论