日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用BBRSACryptor实现iOS端的RSA加解密

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用BBRSACryptor实现iOS端的RSA加解密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

RSA這種非對稱加密被廣泛的運用于網絡數據的傳輸,但其在iOS上很難直接實現,BBRSACryptor框架通過移植openssl實現了iOS端的RSA,本文將介紹如何使用BBRSACryptor生成證書,加載公鑰,以及后端如何用php讀取證書,加載私鑰。

iOS加密

新建工程并集成BBRSACryptor

這個框架自帶的demo將工程文件與框架放在了同一目錄,因此在配置Header Search Paths時沒有包含工程文件夾,一定注意,下面新建的工程將框架放在了工程文件夾內,因此頭文件尋找路徑需要包含上工程目錄。詳細步驟如下。
1. 新建一個iOS工程,將BBRSACryptor、GTMBase64、OpenSSL三個文件夾拖入工程,目錄結構如下。

2.在Build Settings中配置Header Search Pathes。

注意最前面的文件夾名稱要和自己的工程名相同

3.打開BBRSACryptor.m文件,修改存儲證書的目錄和文件路徑,默認的是隱藏目錄(前加點),為了方便查看與復制證書,建議將路徑前面的點去掉,例如:

#define OpenSSLRSAKeyDir [DocumentsDir stringByAppendingPathComponent:@"openssl_rsa"] #define OpenSSLRSAPublicKeyFile [OpenSSLRSAKeyDir stringByAppendingPathComponent:@"publicKey.pem"] #define OpenSSLRSAPrivateKeyFile [OpenSSLRSAKeyDir stringByAppendingPathComponent:@"privateKey.pem"]

4.打開ViewController.m,導入BBRSACryptor.h和GTMBase64.h,使用下面的代碼生成證書。

BBRSACryptor *rsaCryptor = [[BBRSACryptor alloc] init]; [rsaCryptor generateRSAKeyPairWithKeySize:1024];

運行后,在控制臺會打印出證書路徑,進入路徑后,可以看到公鑰和私鑰證書。

5.使用TextEdit打開公鑰證書,將—–BEGIN PUBLIC KEY—–和—–END PUBLIC KEY—–之間的部分復制,然后在工程中新建一個宏,來保存這個公鑰,以便后續讀取。

#define PublicKey \ @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjYyZoASYgT+MIc/5YkSJngRbNYEQEI3UF7RVijF0STcMs93pH0qhjLJIQnsvUn2ghEVM4X+S+tQ0XhS+7tmL1UMEFgDgYwG/xr/ZjUozgQyvqeUejA08pbun0E0/Yx9WuBQfCpCc5vNka/ENDZEy/2PbEO5KD3hgsnH1JyNqNnwIDAQAB"

客戶端僅保存公鑰即可,私鑰放在服務器上。使用php可以直接讀取證書。

6.在客戶端加載公鑰與進行加密
前面已經創建了宏,以后通過宏即可加載公鑰。如下:

BBRSACryptor *rsaCryptor = [[BBRSACryptor alloc] init]; // PublicKey是從公鑰證書中復制的內容創建的宏,見上文。 [rsaCryptor importRSAPublicKeyBase64:PublicKey]; NSData *data = [rsaCryptor encryptWithPublicKeyUsingPadding:RSA_PADDING_TYPE_PKCS1 plainData:[@"客戶端加密的內容" dataUsingEncoding:NSUTF8StringEncoding]]; NSString *baseStr = [GTMBase64 stringByEncodingData:data]; NSLog(@"%@",baseStr);

先加載公鑰,然后把要加密的內容轉換成NSData,加密后的內容先進行base64編碼后再傳輸。為了驗證能夠解密,最后對base64編碼的加密內容進行了打印,將這個內容先復制到剪貼板,后面貼在php中進行解密。

php解密

為了方便,將按照上文方法生成的私鑰證書復制到服務器的某個目錄,并在這個目錄下創建一個php文件,并添加如下代碼:

<?phpheader("Content-type:text/html; charset=utf-8");/*** 密鑰文件的路徑*/$privateKeyFilePath = 'privateKey.pem';/*** 公鑰文件的路徑*/$publicKeyFilePath = 'publicKey.pem';extension_loaded('openssl') or die('php需要openssl擴展支持');(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath))or die('密鑰或者公鑰的文件路徑不正確');/*** 生成Resource類型的密鑰,如果密鑰文件內容被破壞,openssl_pkey_get_private函數返回false*/$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));/*** 生成Resource類型的公鑰,如果公鑰文件內容被破壞,openssl_pkey_get_public函數返回false*/$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));($privateKey && $publicKey) or die('密鑰或者公鑰不可用');// 這段內容來自上面iOS端打印的加密內容的base64編碼$encryptData = 'J0oTqBCNbsJauVwRz+380y519sSa7ficUO1NvRKiMGKUGJF0pomOu20fHqC77NmsKle9/L4DyYNr3xDgDa4SpO0in39rA9EYXzmx3rlyI1c8iPjAkQ6XpwZk7BsThiCFB/6QmkTW5pMIo4b0axRv/4lq1Rqx/YtuIsGkXQTNntI=';$ee = base64_decode($encryptData);$decryptData ='';if (openssl_private_decrypt($ee, $decryptData, $privateKey)) {echo '解密成功,解密后數據為:', $decryptData, PHP_EOL;} else {die('解密成功');} ?>

訪問這個腳本,如果前面做的沒有問題,會得到解密的結果:

php加密

使用私鑰加密后,可以在客戶端利用公鑰解密。使用下面的代碼進行加密。

<?phpheader("Content-type:text/html; charset=utf-8");/*** 密鑰文件的路徑*/$privateKeyFilePath = 'privateKey.pem';/*** 公鑰文件的路徑*/$publicKeyFilePath = 'publicKey.pem';extension_loaded('openssl') or die('php需要openssl擴展支持');(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath))or die('密鑰或者公鑰的文件路徑不正確');/*** 生成Resource類型的密鑰,如果密鑰文件內容被破壞,openssl_pkey_get_private函數返回false*/$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));/*** 生成Resource類型的公鑰,如果公鑰文件內容被破壞,openssl_pkey_get_public函數返回false*/$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));($privateKey && $publicKey) or die('密鑰或者公鑰不可用'); $originalData = '服務器加密的內容';/*** 加密以后的數據,用于在網路上傳輸*/$encryptData = '';echo '原數據為:', $originalData, PHP_EOL;///用私鑰加密if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {echo '加密成功,加密后數據(base64_encode后)為:', base64_encode($encryptData), PHP_EOL;} else { die('加密失敗'); } ?>

訪問腳本后會打印出加密的base64編碼,將這個編碼復制到客戶端進行解密,來驗證可用性。

iOS解密

要在iOS端解密,和加密類似,先加載公鑰,然后把base64編碼的加密內容解碼,解密后轉為NSString即可。

BBRSACryptor *rsaCryptor = [[BBRSACryptor alloc] init]; [rsaCryptor importRSAPublicKeyBase64:PublicKey]; NSData *enCryptorDataBase64 = [@"aWdbPQHiQzU5CUOAIGQT3OD/MPqcqoXHXDFtYQPVRo9/Mb1S/aVcKQVHDjBpLgfzw+0mWxgHN6SuOfH8z9WobgQrTZh+pxhau3DnfukLmENGPWVMqquWMxTkEU7yCkx/RI7XEwv3jk9d4UgFOv35eqNUgYyWDq2gGatEpfnUg6U=" dataUsingEncoding:NSUTF8StringEncoding]; NSData *deCryptorData = [rsaCryptor decryptWithPublicKeyUsingPadding:RSA_PADDING_TYPE_PKCS1 cipherData:[GTMBase64 decodeData:enCryptorDataBase64]]; NSLog(@"%@",[[NSString alloc] initWithData:deCryptorData encoding:NSUTF8StringEncoding]);

不出意外的話,控制臺將會打印出解密后的內容。

轉載于:https://www.cnblogs.com/aiwz/p/6154011.html

總結

以上是生活随笔為你收集整理的利用BBRSACryptor实现iOS端的RSA加解密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级片在线免费播放 | 亚洲综合五月天 | 国产激情第一页 | 五月天婷婷在线视频 | 欧美一级专区免费大片 | 亚洲欧美日本国产 | 日本精品视频一区二区三区 | 国产盗摄视频在线观看 | 久久国产视频网站 | www四虎com| 欧美精品性生活 | 在线观看一区视频 | 亚洲逼逼 | 日本男男激情gay办公室 | 欧美日本中文字幕 | 91成年版 | 狠狠干天天 | 亚洲最大成人网站 | 脱美女衣服亲摸揉视频 | 东方欧美色图 | 久久久久99精品成人片试看 | 精品女厕偷拍一区二区 | 四虎影院成人 | 色播在线播放 | 蜜臀999| 国产区高清 | 成人福利小视频 | 久久久久久久久久99精品 | 在线小视频你懂的 | 制服丝袜在线视频 | 亚洲精品乱码久久久久久写真 | 国产福利精品在线观看 | 色综合av在线 | 国产视频在线一区 | 色婷婷久久久亚洲一区二区三区 | 亚洲激情一区二区 | 天堂网2020 | 国语对白做受欧美 | 天天艹av | 播色网 | 国产高清自拍视频 | 欧美成人综合视频 | 欧美一卡二卡在线观看 | 琪琪色在线视频 | 欧美激情影院 | 看片网址国产福利av中文字幕 | 黄色三级视频在线观看 | 国产喷水视频 | 以女性视角写的高h爽文 | 欧美顶级少妇做爰hd | 国产乱仑视频 | 亚洲色成人www永久在线观看 | av小说免费在线观看 | 波多野结衣网站 | 日本一区二区三区免费观看 | 色播日韩 | 污视频网址 | 免费成人av网址 | 韩国三级在线看 | 伊人久久大香线蕉av色婷婷色 | 日本一区二区在线免费观看 | 日本 在线 | 六月丁香激情网 | 免费黡色av | 日韩一级在线播放 | 欧美精品二区三区四区免费看视频 | 女人被狂躁c到高潮 | 亚洲人成7777| 狠狠躁夜夜躁人 | 国产黑人 | xnxx国产| 国产伦理在线 | 麻豆av导航| 亚洲色婷婷一区二区三区 | 秋霞在线观看秋 | 免费色视频 | 欧美啪啪小视频 | 美女大黄动图 | 天天看毛片| 日本青青草 | 日产精品一区 | 色妹子综合 | 免费国产精品视频 | 91亚洲国产成人精品性色 | 国产123区在线观看 91国产一区二区 | 激情成人av | 日韩精品视频一区二区三区 | 物业福利视频 | 日韩av激情| 色情毛片| 69视频一区二区三区 | 天天艹天天 | 97国产资源 | 国内国产精品天干天干 | 2022精品国偷自产免费观看 | 欧美深性狂猛ⅹxxx深喉 | 成人免费无码大片a毛片 | 涩涩网址 | 美女网站黄页 |