前言
后臺(tái)給的公鑰糙捺,私鑰朝巫,不管是公鑰加密私鑰解密還是私鑰加密公鑰解密都是可以的坠陈,但是Mac
通過openssl
生成的公鑰私鑰還有一點(diǎn)點(diǎn)問題连躏。(最大的問題還是獲取私鑰的不對(duì))剩岳。
感謝文章:iOS之RSA加密解密與后臺(tái)之間的雙向加密詳解
本文只是簡單說明Mac
通過openssl
生成公鑰私鑰,獲取私鑰入热,公鑰的時(shí)機(jī)以及注意點(diǎn)拍棕。
生成公鑰私鑰。
-
cd
到一個(gè)文件夾勺良,比如RSA
绰播。
cd /Users/xxxx/Desktop/RSA
2.執(zhí)行Mac
自帶的openssl
命令。
openssl
3.生成私鑰
genrsa -out rsa_private_key.pem 1024
4.將私鑰轉(zhuǎn)成PKCS8的
格式(必須轉(zhuǎn))格式轉(zhuǎn)好后立刻復(fù)制.切記后面使用的私鑰加密解密就是執(zhí)行命令行之后終端打印的私鑰尚困,而不是執(zhí)行命令行之后重新生成的私鑰蠢箩,(網(wǎng)上一些命令行是錯(cuò)誤的,一定要注意)事甜。
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
復(fù)制上圖的私鑰保存谬泌。
5.生成公鑰。
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
測試
RSA
加密解密逻谦。
GitHub RSA
一個(gè)工具類 Objective-C-RSA掌实,然后下載,后面加密解密使用邦马。
通過文本編輯打開剛才的RSA文件里的rsa_public_key.pem
贱鼻,拿到公鑰宴卖。
私鑰
使用第4步轉(zhuǎn)PKCS8
格式后保存的私鑰。
測試結(jié)果:
NSString *publicKey = @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0OiXHaees9Aj5h31YYGw5nfCUdS6MK0T5UrJAfIdwkUbadDOXclDVK+ftBMe+DVAn7xSORPi1cjiBBjU+lo/hmNGoDWQGgxr/LAkaJz3/A1Sv+S1d3deTc6SFN+toDQbpsx3jYOUrJM1B8olUI1a9f+DgzkF/sIKJ7V4Wh7XtlQIDAQAB";
//私鑰
NSString *privateKey = @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALQ6Jcdp56z0CPmHfVhgbDmd8JR1LowrRPlSskB8h3CRRtp0M5dyUNUr5+0Ex74NUCfvFI5E+LVyOIEGNT6Wj+GY0agNZAaDGv8sCRonPf8DVK/5LV3d15NzpIU362gNBumzHeNg5SskzUHyiVQjVr1/4ODOQX+wgontXhaHte2VAgMBAAECgYAljox63sXpk70fCq4DMay74P7WYQj/KrEn56S/rXOn8I48TcTGhYr0sT6WdM2O/EU83SSCdTsCzLebo4iK72Mx/VI1alKWSfyncfXi51gZePpgVaudTG9kcI8sszRG+P7zfPptr4HxZ7X2LveJy5myImqQomESEUvDVHdZCtIIgQJBANxT7Bev+LA+jH9gSV4Uc14B5YYabpLso39t/uhTaOdVNxV2eV2UAF1PGg2R3IMwlzHcjRkDDpBiWuXaxbTKCaECQQDRaCUb7J1mPDBrEIi1Aupho16b3Sy82vzZ9WGLgMl+eMKbSy0rAdJA10CtNKL2Gq7EGNoN4CpDPPulJTmm6Cd1AkAajH5BaHHmAtN5McgFbx9rr3zRyPOT/rHA1CdIJWzZmzoU+v6q2P+mPrbb9byFjmBZoMLbxbOGkGN1mQQDweihAkEAkAJ9Mr0AaeSOr7KJMWK16Tu+vpXWRHKdXQ9Ba/y/lThbLQ0AHQl9nJXrprICOBmVgspMeypkJiV0Mdht03joWQJAaF8kDoCNkpp++6aqVbqFBYysiW83AiHgL0JA5dhQ2XzIFYZIpLOsM+Je4yw9ppQ76DqePg6pqRKjR6m9Gatn+A==";
//測試要加密的數(shù)據(jù)
NSString *sourceStr = @"iOS端RSA加密";
//公鑰加密
NSString *encryptStr = [RSA encryptString:sourceStr publicKey:publicKey];
//私鑰解密
NSString *decrypeStr = [RSA decryptString:encryptStr privateKey:privateKey];
NSLog(@"公鑰加密私鑰解密后的數(shù)據(jù) %@",decrypeStr);
//私鑰加密
NSString *encryptStr1 = [RSA encryptString:sourceStr privateKey:privateKey];
//公鑰解密
NSString *decrypeStr1 = [RSA decryptString:encryptStr1 publicKey:publicKey];
NSLog(@"私鑰加密公鑰解密后的數(shù)據(jù) %@",decrypeStr1);
結(jié)果:
2019-01-08 18:17:48.834840+0800 RSAUtil[53592:4032334] 原始數(shù)據(jù):iOS端RSA加密 公鑰加密私鑰解密后的數(shù)據(jù) iOS端RSA加密
2019-01-08 18:17:48.843686+0800 RSAUtil[53592:4032334] 原始數(shù)據(jù):iOS端RSA加密 私鑰加密公鑰解密后的數(shù)據(jù) iOS端RSA加密
可以看到公鑰加密私鑰解密后的數(shù)據(jù)是正常的邻悬,私鑰加密公鑰解密后的數(shù)據(jù)是正常的嘱腥。
需要注意的是:RSA 文件中已經(jīng)對(duì)結(jié)果做了base64加密解密
。
end RSA 的加密簡單介紹到這里拘悦。