常见的加密算法介绍:
DES:对称加密,加密和解密用同一个秘钥。
AES:对称加密,加密和解密用同一个秘钥,是下一代的加密算法标准,比DES速度快,安全级别高。它可以使用128、192和256位密钥。AES使用几种不同的方法来执行排列和置换运算,根据它的这种加密算法我们可以自己随意生成AES密钥,比如随机的16位数字字符串就可以作为128位秘钥。
RSA: 非对称加密,用公钥加密,私钥解密。借助于openssl命令行生成RSA密钥对。
四种国秘算法:sm1:为对称加密。其加密强度与AES相当。sm2:非对称加密,由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA,很多银行都喜欢用这种加密算法。sm3:对称加密,安全级别。 sm3:一种签名算法类似md5。sm4:对称加密算法,类似AES。
加密方案介绍
1. 通讯加密
方案:非对称加密+对称加密,例如RSA+AES、sm2+sm4。
每次通信客户端随机生成AES秘钥,用AES秘钥加密报文,用RSA共钥加密AES秘钥。将加密后的报文y以及一些必要信息包在头部发送到服务器。后台首先用RSA秘钥解密得到AES秘钥,再用AES秘钥解密报文。
虽然RSA加密算法的安全性很高,但是RSA加解密的速度非常慢而且RSA不能加密过长的报文,这就限制了单独使用RSA加密传输的报文。AES算法的安全性不及RSA但是对加密报文的长度是没有限制的而且加解密运算速度很快。
示例代码:
NSMutableString *AESKey = [[NSMutableString alloc] init];
for (int i = 0; i < 16; i ++)
{
[AESKey appendFormat:@"%d", arc4random() % 10];
}
NSData *AESKeyData = [AESKey dataUsingEncoding:NSUTF8StringEncoding];
data = [data dataByAES128Operation:FMFAESEncrypt withMode:FMFAESCBC key:AESKeyData iv:[@"1269571569321021" dataUsingEncoding:NSUTF8StringEncoding]];
NSData *secureKey = nil;
RSAKey *RSAPublicKey = [RSAKey getFromBundle:@""];
secureKey = [AESKeyData dataByRSAEncodingWithPublicKey:RSAPublicKey];
a.以上代码不可以直接使用,需要配合openssl的加密算法。
b.对以上通讯算法可以参入md5摘要算法,服务器可以直接验证报文被篡改。
2.键盘加密
为了防止用户的密码在键盘输入时被窃取,一般是用户输入的密码加密之后上传到服务器。但是这种情况下用户的密码也可能被别人在传输过程中的路由器截取。为了解决这个问题,用户输入的密文采取一次一秘的方案。
在每次密码输入键盘谈起之前向后台请求随机因子,用户密码的加密和随机因子以某种方式绑在一起。这就保证了1.同样的密码用户每次传输的秘文都是不一样的,被截取也是没有关系的。2.即使知道了客户端的加密算法和解密秘钥没有后台的随机因子,密码也是不会被破解。