对称加密算法
来源:互联网 发布:淘宝暗黑系服装品牌 编辑:程序博客网 时间:2024/05/20 11:23
对称加密算法
提示:加密内容属于高级程序员的话题!有些内容会很枯燥!注意掌握加密的思路和操作步骤即可!代码不要求会写,只要会用就行!
- 又称传统加密算法
- 加密和解密使用同一个
密钥
对称加密算法示例
- 密钥:X
- 加密算法:每个字符+X
- 明文:
Hello
- 密钥为
1
时加密结果:Ifmmp
- 密钥为
2
时加密结果:Jgnnq
优缺点
- 优点
- 算法公开、计算量小、加密速度快、加密效率高
- 缺点
- 双方使用相同钥匙,安全性得不到保证
注意事项
- 密钥的保密工作非常重要
- 密钥要求定期更换
经典算法
苹果的钥匙串访问采用的是 AES 加密
ECB & CBC
- ECB :电子代码本,就是说每个块都是独立加密的
- CBC :密码块链,使用一个密钥和一个初始化向量 (IV)对数据执行加密转换
OpenSSL 终端测试命令
ECB
# 加密$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin# 解密$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.bin -out msg1.txt -d# 查看加密之后的二进制文件$ xxd msg1.bin
CBC
# 加密$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in a.txt -out msg1.bin# 解密$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.bin -out msg4.txt -d# 查看加密之后的二进制文件$ xxd msg1.bin
CBC加密可以有效地保证密文的完整性,也就是说如果有一个块在传送时丢失了(或被敌人改变了),就会导致后面所有的块无法正常解密这个特性可以用来防范一些窃听技巧
代码演练
- AES
NSString *key = @"abc";// ECB 加密&解密NSString *str1 = [CryptorTools AESEncryptString:@"hello" keyString:key iv:nil];NSLog(@"AES ECB 加密 %@", str1);NSLog(@"AES ECB 解密 %@", [CryptorTools AESDecryptString:str1 keyString:key iv:nil]);// CBC 加密&解密uint8_t iv[8] = {1, 2, 3, 4, 5, 6, 7, 8};NSData *ivData = [NSData dataWithBytes:iv length:sizeof(iv)];NSString *str2 = [CryptorTools AESEncryptString:@"hello" keyString:key iv:ivData];NSLog(@"AES CBC 加密 %@", str2);NSLog(@"AES CBC 解密 %@", [CryptorTools AESDecryptString:str2 keyString:key iv:ivData]);
- DES
NSString *key = @"abc";// ECB 加密&解密NSString *str1 = [CryptorTools DESEncryptString:@"hello" keyString:key iv:nil];NSLog(@"DES ECB 加密 %@", str1);NSLog(@"DES ECB 解密 %@", [CryptorTools DESDecryptString:str1 keyString:key iv:nil]);// CBC 加密&解密uint8_t iv[8] = {1, 2, 3, 4, 5, 6, 7, 8};NSData *ivData = [NSData dataWithBytes:iv length:sizeof(iv)];NSString *str2 = [CryptorTools DESEncryptString:@"hello" keyString:key iv:ivData];NSLog(@"DES CBC 加密 %@", str2);NSLog(@"DES CBC 解密 %@", [CryptorTools DESDecryptString:str2 keyString:key iv:ivData]);
OpenSSL 终端测试命令
ECB 加密/解密
- AES
# AES(ECB)加密$ echo -n "hello" | openssl enc -aes-128-ecb -K 616263 -nosalt | base64# AES(ECB)解密$ echo -n "d1QG4T2tivoi0Kiu3NEmZQ==" | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt -d
- DES
# DES(ECB)加密$ echo -n "hello" | openssl enc -des-ecb -K 616263 -nosalt | base64# DES(ECB)解密$ echo -n "HQr0Oij2kbo=" | base64 -D | openssl enc -des-ecb -K 616263 -nosalt -d
CBC 加密/解密
- AES
# AES(CBC)加密$ echo -n "hello" | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64AES(CBC)解密$ echo -n "u3W/N816uzFpcg6pZ+kbdg==" | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt -d
- DES
# DES(CBC)加密$ echo -n "hello" | openssl enc -des-cbc -K 616263 -nosalt -iv 0102030405060708 | base64# DES(CBC)解密$ echo -n "alvrvb3Gz88=" | base64 -D | openssl enc -des-cbc -K 616263 -nosalt -iv 0102030405060708 -d
终端命令说明
- 加密过程是先加密,再base64编码
- 解密过程是先base64解码,再解密
|
是终端管道命令,会将前一个命令结果传递给后一个命令-K
使用的密钥需要是密钥的 ASCII 码
0 0
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法
- 对称加密算法,非对称加密算法
- 对称加密算法,非对称加密算法
- 对称加密算法,非对称加密算法
- 对称加密算法----DES加密算法
- 摘要-跟谁工作到底多重要?
- 你的Docker环境安全吗?
- Visual SLAM算法笔记
- ScrollView图片缩放
- DataSource访问数据库工具类
- 对称加密算法
- No qualifying bean of type [XXX.XXX.XXX] found for dependency: expected at least 1 bean which q
- 录屏代码流程概述
- 关于原keil2建立的的project打不开的问题
- 整理很详细的Java正则表达式使用大全
- SQL总结
- zabbix自定义key类型之计算(Calculated items)
- Android之自定义view内存清理
- emWin 2天速成实例教程010_Menu标题菜单控件使用方法