-
對稱加密的特點
1)加密/解密使用相同的密鑰
2)加密和解密的過程是可逆的(明文->密文->明文)
對稱加密和解密 -
缺點
無法保證密鑰傳輸過程的安全問題 -
經(jīng)典算法
1)DES 數(shù)據(jù)加密標準
2)3DES 使用3個密鑰,對消息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)
3)AES 高級加密標準 -
對稱加密的密碼算法
密碼算法可以分為分組密碼和流密碼兩種。
分組密碼 :每次只能處理特定長度的一zu數(shù)據(jù)的一類密碼算法。一個分組的比特數(shù)量就稱之為分組長度。
例如:
DES和3DES的分組長度都是64比特。即每次只能加密64比特的明文,并生成64比特的密文。
AES的分組長度有128比特、192比特和256比特可以選擇。
流密碼 :對數(shù)據(jù)流進行連續(xù)處理的一類算法。
流密碼中一般以1比特、8比特或者是32比特等作為單位倆進行加密和解密。 -
ECB分組模式
ECB模式的全稱為Electronic CodeBook模式。又成為電子密碼本模式,每個塊都是獨立加密的。
特點:
1)使用ECB模式加密的時候,相同的明文分組 會被轉(zhuǎn)換為 相同的密文分組。
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 -dCBC分組模式
CBC模式全稱為Cipher Block Chainning模式(密文分組鏈接模式|電子密碼鏈條),使用一個密鑰和一個初始化向量 (IV)對數(shù)據(jù)執(zhí)行加密轉(zhuǎn)換,可以有效地保證密文的完整性
特點:在CBC模式中,首先將明文分組與前一個密文分組進行XOR運算,然后再進行加密。

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";
//加密
/*
第一個參數(shù):要加密的明文(字符串)
第二個參數(shù):共享密鑰
第三個參數(shù):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(數(shù)據(jù)加密標準)-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(數(shù)據(jù)加密標準)-CBC 加密&解密
DES-CBC的加密和解密方式參見AES-CBC的加密和解密,不過在加密或者解密之前,先要修改加密方式為DES
EncryptionTools * encry = [EncryptionTools sharedEncryptionTools];
encry.algorithm = kCCAlgorithmDES;
