常見的加密算法介紹:
DES:對稱加密灾常,加密和解密用同一個秘鑰舌仍。
AES:對稱加密,加密和解密用同一個秘鑰,是下一代的加密算法標(biāo)準(zhǔn)泰偿,比DES速度快熄守,安全級別高。它可以使用128甜奄、192和256位密鑰柠横。AES使用幾種不同的方法來執(zhí)行排列和置換運算,根據(jù)它的這種加密算法我們可以自己隨意生成AES密鑰课兄,比如隨機(jī)的16位數(shù)字字符串就可以作為128位秘鑰牍氛。
RSA: 非對稱加密,用公鑰加密烟阐,私鑰解密搬俊。借助于openssl命令行生成RSA密鑰對紊扬。
四種國秘算法:sm1:為對稱加密。其加密強(qiáng)度與AES相當(dāng)唉擂。sm2:非對稱加密餐屎,由于該算法基于ECC,故其簽名速度與秘鑰生成速度都快于RSA玩祟,很多銀行都喜歡用這種加密算法腹缩。sm3:對稱加密,安全級別空扎。 sm3:一種簽名算法類似md5藏鹊。sm4:對稱加密算法,類似AES转锈。
加密方案介紹
1. 通訊加密
方案:非對稱加密+對稱加密盘寡,例如RSA+AES、sm2+sm4撮慨。
每次通信客戶端隨機(jī)生成AES秘鑰竿痰,用AES秘鑰加密報文,用RSA共鑰加密AES秘鑰砌溺。將加密后的報文y以及一些必要信息包在頭部發(fā)送到服務(wù)器影涉。后臺首先用RSA秘鑰解密得到AES秘鑰,再用AES秘鑰解密報文抚吠。
雖然RSA加密算法的安全性很高常潮,但是RSA加解密的速度非常慢而且RSA不能加密過長的報文,這就限制了單獨使用RSA加密傳輸?shù)膱笪目ΑES算法的安全性不及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摘要算法岔留,服務(wù)器可以直接驗證報文被篡改。
2.鍵盤加密
為了防止用戶的密碼在鍵盤輸入時被竊取检柬,一般是用戶輸入的密碼加密之后上傳到服務(wù)器献联。但是這種情況下用戶的密碼也可能被別人在傳輸過程中的路由器截取。為了解決這個問題何址,用戶輸入的密文采取一次一秘的方案里逆。
在每次密碼輸入鍵盤談起之前向后臺請求隨機(jī)因子,用戶密碼的加密和隨機(jī)因子以某種方式綁在一起用爪。這就保證了1.同樣的密碼用戶每次傳輸?shù)拿匚亩际遣灰粯拥脑海唤厝∫彩菦]有關(guān)系的。2.即使知道了客戶端的加密算法和解密秘鑰沒有后臺的隨機(jī)因子偎血,密碼也是不會被破解诸衔。