IOS客戶端實現RSA加密


在IOS的app登陸模塊,用戶名和密碼如果直接傳給后台服務器,很容易被截獲並偽造網絡請求,

如果利用RSA算法在每個客戶端利用公鑰解密,服務器端進行私鑰解密,即使截獲了密碼也是無法解密的

在這里只介紹客戶端如何對密碼進行公鑰加密和解密

首先打開終端生成公鑰和私鑰(要有openSSL工具)

openssl genrsa -out private_key.pem 1024

openssl req -new -key private_key.pem -out rsaCertReq.csr

openssl x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt

openssl x509 -outform der -in rsaCert.crt -out public_key.der          
 
openssl pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt
openssl rsa -in private_key.pem -out rsa_public_key.pem -pubout
 
openssl pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt

在第二步的時候輸入密鑰的信息,包括密碼,請記住你輸入的密碼
上面的命令會生成7個文件,IOS用到的是public_key.der和private_key.p12
導入到項目中不要直接拖拽進去,而是點擊Xcode右下角的+號,選擇add files to ""
新建項目后添加庫:Security.framework

在項目中添加所依賴的文件RSAEncryptor和NSData+Base64在這里下載
添加RSAEncryptor和NSData+Base64的頭文件
實現代碼
    RSAEncryptor* rsaEncryptor = [[RSAEncryptor alloc] init];
    NSString* publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public_key" ofType:@"der"];
    NSString* privateKeyPath = [[NSBundle mainBundle] pathForResource:@"private_key" ofType:@"p12"];
    [rsaEncryptor loadPublicKeyFromFile: publicKeyPath];
    [rsaEncryptor loadPrivateKeyFromFile: privateKeyPath password:@"1234"];    // 密碼
    
    NSString* restrinBASE64STRING = [rsaEncryptor rsaEncryptString:@"你好"];
    NSLog(@"加密后的: %@", restrinBASE64STRING);     //加密
    NSString* decryptString = [rsaEncryptor rsaDecryptString: restrinBASE64STRING];//解密
    NSLog(@"解密后的: %@", decryptString);
輸出結果

2016-10-20 16:44:22.455 RSA[10579:458963] 加密后的: trsdtG4vkzsAbMzu4k6HL3NQau6zyvhQDwzfI1OcjiOGENydbEUJ/Rt9xgCmhbaP8VEGC6Zd2ZnBMlNnQ+/YAHvGGfdrdcO9QPwRex2LX38w5ctzDKByYnrEcKI9k3jwNGHepU7E3jNPvQdL89VssP1+vq6GiAqnYVOOCwtlm0U=

2016-10-20 16:44:22.456 RSA[10579:458963] 解密后的: 你好




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM