加密算法分類
- 對(duì)稱加密:加密和解密都是使用一個(gè)密鑰芦劣,密鑰的保密工作就非常重要.
- 非對(duì)稱加密:用公鑰加密,私鑰解密; 用私鑰加密罐监,公鑰解密.
對(duì)稱加密
常見對(duì)稱加密算法
- DES 數(shù)據(jù)加密標(biāo)準(zhǔn)
- 3DES
- AES "高級(jí)"加密標(biāo)準(zhǔn)
- ECB 電子代碼本,每個(gè)塊都是獨(dú)立加密的
- CBC 密碼塊鏈:使用一個(gè)密鑰和一個(gè)初始化向量 (IV)對(duì)數(shù)據(jù)執(zhí)行加密轉(zhuǎn)換,可以有效地保證密文的完整性梳庆。
ECB 終端測(cè)試命令
$ 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 // 查看加密之后的二進(jìn)制文件
CBC終端測(cè)試命令
$ 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 //查看加密之后的二進(jìn)制文件
非對(duì)稱加密算法
概要
1.加密解密方法: 用公鑰解密然后用私鑰解密;或者私鑰加密然后用公鑰解密
2.優(yōu)缺點(diǎn)鳞溉,優(yōu)點(diǎn)是安全 缺點(diǎn)是速度慢
OpenSSL 終端命令
openssl genrsa -out private.pem 512 //生成強(qiáng)度是 512 的 RSA 私鑰
openssl rsa -in private.pem -text -out private.txt //以明文輸出私鑰內(nèi)容
openssl rsa -in private.pem -check //校驗(yàn)私鑰文件
openssl rsa -in private.pem -out public.pem -outform PEM -pubout //從私鑰中提取公鑰
$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text //以明文輸出公鑰內(nèi)容
openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin //使用公鑰加密小文件
openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt //使用私鑰解密小文件
openssl rsa -in private.pem -out private.der -outform der //將私鑰轉(zhuǎn)換成 DER 格式
openssl rsa -in public.pem -out public.der -pubin -outform der //將公鑰轉(zhuǎn)換成 DER 格式
iOS 相關(guān)證書生成命令
openssl genrsa -out ca.key 1024 //生成私鑰
openssl req -new -key ca.key -out rsacert.csr //創(chuàng)建證書請(qǐng)求
openssl x509 -req -days 3650 -in rsacert.csr -signkey ca.key -out rsacert.crt //生成證書并簽名瘾带,有效期10年
openssl x509 -outform der -in rsacert.crt -out rsacert.der //將 PEM 格式文件轉(zhuǎn)換成 DER 格式
openssl pkcs12 -export -out p.p12 -inkey ca.key -in rsacert.crt //入P12文件
安全之簽名
MD5
Hash 散列函數(shù)不可逆的特點(diǎn),是“加密”的另一種應(yīng)用穿挨,可實(shí)現(xiàn)對(duì)安全信息的簽名驗(yàn)證和標(biāo)志文件月弛。【不是正真的加密算法】
RSA
RSA算法有兩個(gè)作用一個(gè)是加密一個(gè)是數(shù)字簽名
數(shù)字簽名
發(fā)送方
"報(bào)文" HASH 得到 "報(bào)文摘要"
"報(bào)文摘要" 用公鑰加密(數(shù)字簽名) + 報(bào)文
發(fā)送給接收方
接收方
"報(bào)文" HASH 得到 "報(bào)文摘要"
"數(shù)字簽名" 用私鑰解密 判斷是否與 "報(bào)文摘要" 相同
iOS 安全特有功能
1.手機(jī)指紋科盛、密碼登錄
1 判斷是否有使用指紋或密碼驗(yàn)證: - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error attribute((swift_error(none)));
policy 分為: LAPolicyDeviceOwnerAuthenticationWithBiometrics 和 LAPolicyDeviceOwnerAuthentication帽衙, 前者只使用指紋,后者在指紋失敗后會(huì)彈出密碼驗(yàn)正贞绵。
2 請(qǐng)求驗(yàn)證厉萝,彈出驗(yàn)證界面 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * error))reply;
3 驗(yàn)證結(jié)果,如果 success 是YES標(biāo)志驗(yàn)證成功榨崩,NO標(biāo)志不成功谴垫。 當(dāng)驗(yàn)證不成共時(shí),error 有:
3.1 LAErrorAuthenticationFailed - 指紋無(wú)法識(shí)別
3.2 LAErrorUserCancel --用戶點(diǎn)擊了取消
3.3 LAErrorUserFallback --用戶點(diǎn)擊了輸入密碼
3.4 LAErrorSystemCancel --系統(tǒng)取消
3.5 LAErrorPasscodeNotSet --因?yàn)槟阍O(shè)備上沒有設(shè)置密碼
3.6 LAErrorTouchIDNotAvailable --設(shè)備沒有Touch ID
3.7 LAErrorTouchIDNotEnrolled --因?yàn)槟愕挠脩魶]有輸入指紋
3.8 LAErrorTouchIDLockout --多次輸入母蛛,密碼鎖定
3.9 LAErrorAppCancel-- 比如電話進(jìn)入翩剪,用戶不可控的
2.鑰匙串:保存安全性很高的小數(shù)據(jù),他還具有一次保存彩郊,長(zhǎng)久保留【刪除應(yīng)用后還存在】的特點(diǎn)
iOS 中重要的函數(shù)
1.非對(duì)稱加密函數(shù)
SecKeyEncrypt 使用公鑰對(duì)數(shù)據(jù)加密
SecKeyDecrypt 使用私鑰對(duì)數(shù)據(jù)解密
SecKeyRawVerify 使用公鑰對(duì)數(shù)字簽名進(jìn)行驗(yàn)證
SecKeyRawSign 使用私鑰生成數(shù)字簽名