你好,我是Emma,对称加密初探ing。
对称加密
明文-》 密钥 -》密文
密文-》 密钥 -》明文
- DES 数据加密标准 用的少是强度不够。
- 3DES 只是简单的加强了密钥的强度,但是密钥的保护手段变的更加难。用的比较少
- AES 高级加密标准 eg:钥匙串
应用模式:
1.ECB
2.CBC 密码分组链接模式 , 还需要一个初始化的向量
保证数据完整性:应用场景防止别人窃听。
为啥要这个向量呢?
集合中的向量多变性。
1.ECB方式:
mkdir 加密文件夹
vi abc.txt
按键:i进入编辑模式-》 进入之后打一堆数字,点击esc-》光标订到有字的一行,按‘yy’,到下一行点击'p',按:wq退出。
openssl enc -des-ecb -K 616263 -nosalt -in abc.txt -out msg1.bin
xxd msg1.bin
![](https://img.haomeiwen.com/i4861130/1bb6fce5674a0291.png)
![](https://img.haomeiwen.com/i4861130/31346582483f30ce.png)
每八个字节为一块,因为是64位。
2.CBC 密码分组链接模式
![](https://img.haomeiwen.com/i4861130/8b197a5b11c9d002.png)
openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -in abc.txt -out msg5.bin
xxd msg5.bin
![](https://img.haomeiwen.com/i4861130/c4524b99807310a8.png)
openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -in abc.txt -out msg6.bin
xxd msg6.bin
![](https://img.haomeiwen.com/i4861130/5d994010caadafe8.png)
TODO思考:
![](https://img.haomeiwen.com/i4861130/5492cf4846cef744.png)
openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -in abc.txt -out msg3.bin
xxd msg3.bin
![](https://img.haomeiwen.com/i4861130/6770910573afe669.png)
openssl enc -des-cbc -iv 0102030405060708 -K 616263 -nosalt -in abc.txt -out msg4.bin
xxd msg4.bin
![](https://img.haomeiwen.com/i4861130/ab9088fa29ad3ccc.png)
为什么这个只有两块进行了关联?多加一行的情况下就是三个块进行了关联?
//AES -- ECB 加密
NSString * key = @"abc";
NSLog(@"加密的结果:%@",[[EncryptionTools sharedEncryptionTools] encryptString:@"hello" keyString:key iv:nil]);
// 解密 : d1QG4T2tivoi0Kiu3NEmZQ==
NSLog(@"解密之后的结果:%@",[[EncryptionTools sharedEncryptionTools] decryptString:@"d1QG4T2tivoi0Kiu3NEmZQ==" keyString:key iv:nil]);
输出结果:
2019-07-18 16:33:39.848656+0800 对称加密算法那[1289:600762] 加密的结果:d1QG4T2tivoi0Kiu3NEmZQ==
2019-07-18 16:33:39.848733+0800 对称加密算法那[1289:600762] 解密之后的结果:hello
验证:
![](https://img.haomeiwen.com/i4861130/9f751d51ed277776.png)
NSString * key = @"abc";
uint8_t iv[8] = {1,2,3,4,5,6,1,0};
NSData * ivDate = [NSData dataWithBytes:iv length:sizeof(iv)];
NSString * pwd = [[EncryptionTools sharedEncryptionTools] encryptString:@"hello" keyString:key iv:ivDate];
NSLog(@"%@",pwd);
NSString * dpwd = [[EncryptionTools sharedEncryptionTools] decryptString:@"4izoPUtnuM1Jsc5uQkDQyw==" keyString:key iv:ivDate];
NSLog(@"%@",dpwd);
输出结果:
2019-07-18 16:44:45.461009+0800 对称加密算法那[1295:603753] 4izoPUtnuM1Jsc5uQkDQyw==
2019-07-18 16:44:45.461112+0800 对称加密算法那[1295:603753] hello
终端验证:
![](https://img.haomeiwen.com/i4861130/1706c8a13b5be5e7.png)
CCCrypt 对称加密算法核心函数(加密/解密)
参数:
1.kCCEncrypt 加密/kCCDecrypt 解密
2.加密算法,默认是AES
3.加密方案:ECB/CBC
kCCOptionPKCS7Padding CBC加密
kCCOptionPKCS7Padding | kCCOptionECBMode ECB加密
4.加密密钥
5.密钥长度
6.iv 初始化向量,ECB不需要指定
7.加密的数据
8.加密的数据的长度
9.密文的内存地址
10.密文缓冲区的大小
11.加密结果大小
参考链接:
1.EncryptionTools
2.Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)
网友评论