前言
最近剛做了一個(gè)登錄接口的RSA加解密畏邢,感覺難度不大分预,寫下來給大家以作參考趴梢。
過程
首先后端用的是openssl生成RSA的私鑰和公鑰敬察,詳細(xì)可參考這篇文章iOS中使用RSA加密,一般來說服務(wù)端保留RSA的私鑰秀睛,客戶端持有公鑰,客戶端上傳數(shù)據(jù)時(shí)用公鑰加密莲祸,服務(wù)端用私鑰解密蹂安。
先給出我用的RSA加解密的框架RSA框架Github,這個(gè)框架API都是直接用字符串類型的公鑰可以進(jìn)行操作锐帜,所以我們要先把我們的公鑰轉(zhuǎn)化成字符串田盈。上面生成證書的那篇文章說到要生成iOS用的.der的公鑰,因?yàn)闆]用它的RSA框架缴阎,所以用不到允瞧。
向服務(wù)端要一個(gè).pem 的公鑰,用文本打開(或者直接要一個(gè)公鑰的字符串)蛮拔,如下:
-----BEGIN PUBLIC KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
-----END PUBLIC KEY-----
直接復(fù)制過來述暂,會(huì)發(fā)現(xiàn)每一行都有換行,把換行去掉建炫,就可以在iOS當(dāng)中直接使用畦韭,如下
-----BEGIN PUBLIC KEY-----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-----END PUBLIC KEY-----
接下來就是加解密的過程:
客戶端用公鑰把數(shù)據(jù)加密 -> 后端接收請(qǐng)求參數(shù) ->用私鑰解密獲取正確參數(shù) ->后端根據(jù)請(qǐng)求參數(shù)獲得返回?cái)?shù)據(jù)用私鑰加密 ->客戶端獲取返回?cái)?shù)據(jù) ->公鑰解密后獲取正確數(shù)據(jù)
大致流程是這樣,有些后端會(huì)在數(shù)據(jù)加解密的過程加base64編解碼肛跌,這里需要客戶端和后端溝通好艺配,注意加密解密以及base64編碼解碼的順序。
另外衍慎,RSA公鑰和私鑰都可以用來加密或解密妒挎。只要能保證用A加密,就用B解密就行西饵。至于A是公鑰還是私鑰,其實(shí)可以根據(jù)不同的用途而定鳞芙,這里我剛做的時(shí)候也有疑問眷柔,稍微提一下。
示例代碼:
#define RSA_PublicKey @"-----BEGIN PUBLIC KEY-----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-----END PUBLIC KEY-----"
//加密
NSString *encryptPassword = [RSA encryptString:password publicKey:RSA_PublicKey];
//解密
NSString *decryptString = [RSA decryptString:receiveStr publicKey:RSA_PublicKey];
整個(gè)流程下來感覺難度不大原朝,主要就是證書處理需要探索下驯嘱,還有就是和服務(wù)端調(diào)接口比較費(fèi)時(shí)間,多研究下就可以了
結(jié)束
學(xué)習(xí)之路喳坠,與君共勉鞠评。