iOS RSA加密解密

終端 cd Desktop/ 到桌面 執行下面代碼 生成公鑰加密文件,私鑰解密文件。
openssl
OpenSSL> genrsa -out rsa_private_key.pem 1024
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

將密鑰文件拉到工程中, 調用
-(void)Addencrypt
{
//公鑰加密文件
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"rsa_public_key.pem" ofType:nil];
publicKey = [NSString stringWithContentsOfFile:publicKeyPath encoding:NSUTF8StringEncoding error:nil];

//私鑰解密文件

NSString * privatePath = [[NSBundle mainBundle] pathForResource:@"rsa_private_key.pem" ofType:nil];
privateKey = [NSString stringWithContentsOfFile:privatePath encoding:NSUTF8StringEncoding error:nil];

}

需要加密的地方:
NSString * phone_publicKey = [Encryption addText:self.worldtext.text addkeypublickey:publicKey]; //加密
NSString * phone_privateKey = [Encryption addText:phone_publicKey addkeyprivatekey:privateKey]; //解密

記得 viewDidLoad 調用
[self Addencrypt];

RSA算法類:
私類:
BPG.h

import <Foundation/Foundation.h>

@interface Encryption : NSObject
+(NSString *)addText:(NSString )textstr addkeypublickey:(NSString )publicKey ;
+(NSString *)addText:(NSString *)textstr addkeyprivatekey:(NSString *)privateKey;
@end

BPG.m

import "Encryption.h"

import "HYEncrypt.h"

@implementation Encryption

+(NSString *)addText:(NSString *)textstr addkeypublickey:(NSString *)publicKey
{
NSString *encryptString = nil;

if (textstr.length)
{
    //字符串轉化為data
    NSData *plainTextBytes = [textstr dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"data --%@",plainTextBytes);
    
    //RSA加密的長度限制
    NSString * URLStr = [[NSBundle mainBundle] pathForResource:@"rsa_public_key.pem" ofType:nil];
    size_t blockSize = URLStr.length /8  ;//計算塊,后臺匹配
    //根據RSA長度限制把data分為N塊進行加密
    size_t blockCount = (size_t)ceil([plainTextBytes length] / (double)blockSize);
    
    NSMutableData *encryptedData = [[NSMutableData alloc]init];
    
    //分段加密
    for (size_t i = 0; i < blockCount; i++)
    {
        size_t bufferSize = MIN(blockSize,[plainTextBytes length] - i * blockSize);
        
        //            第一個參數0表示的是從哪里開始截取(數據的下標)
        //            第二個參數2表示截取的數據長度是多少
        NSData *buffer = [plainTextBytes subdataWithRange:NSMakeRange(i * blockSize, bufferSize)];
        
        
        //加密 返回data
        NSData *encryptData = [HYEncrypt encodeByRsaOfData:buffer secretKeyPublic:publicKey];
        
        //拼接加密以后的data
        [encryptedData appendData:encryptData];
    } 
    //base64編碼
    encryptString = [NSMutableString stringWithString:[encryptedData base64EncodedStringWithOptions:0]];
} 
NSLog(@"encryptString---加密--%@",encryptString);

return encryptString;

}

+(NSString *)addText:(NSString *)textstr addkeyprivatekey:(NSString *)privateKey
{
//獲取加密數據,base64編碼數據
NSString *encryptString = textstr;
// NSLog(@"text:%@",textstr);
NSString *decryptString = [HYEncrypt decodeByRsaOfString:encryptString secretKeyPrivate:privateKey];
NSLog(@"decrypt----解密---%@",decryptString);
return decryptString;
}

@end

Paste_Image.png

資源下載地址:http://download.csdn.net/detail/u012973002/9636627

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進行加密后保存到用戶偏好設置( [NSUserDefaul...
    彬至睢陽閱讀 3,005評論 0 7
  • 嘟噥嘟噥:最近接到一個任務:在客戶端動態生成RSA密鑰對,然后向服務器發送這個密鑰對中的公鑰字符串,由服務器進行公...
    TimmyR閱讀 8,103評論 19 21
  • 『職場少數派』是飯團平臺的一個職場類專欄 『職場少數派』 “油菜花”團隊邀請你和我們一起成為職場少數派!!! 團隊...
    職場少數派閱讀 384評論 0 0
  • 1 月 20 日,蘋果官方發布了一款免費的音樂備忘錄應用,輔助音樂人、音樂愛好者、以及任何對音樂感興趣的人隨時記錄...
    最美應用閱讀 1,072評論 0 6
  • 我有種感覺,很想寫出來,但一落筆,它就在我手中失去了光彩,在我腦海里偷偷溜走。 我筆下的主角一定是完美的,他可能有...
    追憶和夢想閱讀 202評論 0 0