原生集成ReactNative及RSA&AES加解密

簡介:

? ? ? ?本文歸納iOS原生項(xiàng)目下集成ReactNative(簡稱RN)的過程,此外赁濒,針對Xcode9中iOS8和iOS9 RSA公鑰的保存問題轨奄,使用RN中的RSA加解密替代原生中RSA加解密。

????????Xcode9中iOS8和iOS9 RSA公鑰的保存問題拒炎,SecItemAdd return?OSStatus noErr挪拟,but result is NULL,經(jīng)過測試發(fā)現(xiàn)該問題出現(xiàn)在iOS8和iOS9系統(tǒng)中击你,所以準(zhǔn)對此問題進(jìn)行了改造升級(jí)玉组。? ? ? ??


配置環(huán)境RN環(huán)境:

Node環(huán)境,包括npm丁侄、yarn等配置不在此贅述.....

1惯雳、package.json中的配置

"react": "16.0.0-alpha.12",

"react-native": "0.48.4",

2、安裝crypto-js鸿摇,AES加解密

npm install?crypto-js --save

3石景、安裝rn-nodeify

參考:https://github.com/tradle/rn-nodeify

npm i --save react-native-crypto

#install peer deps

npm i --save react-native-randombytes

react-native link react-native-randombytes

#install latest rn-nodeify

npm i --save-dev mvayngrib/rn-nodeify

#install node core shims and recursively hack package.json files

#in ./node_modules to add/update the "browser"/"react-native" field with relevant mappings

./node_modules/.bin/rn-nodeify --hack --install

4、執(zhí)行 react-native link

5拙吉、使用CocoaPods配置ReactNative

根目錄Podfile潮孽,

....

? pod'React', :path => './node_modules/react-native', :subspecs => [

? 'Core',

? 'CxxBridge',

? 'DevSupport',

? 'RCTText',

? 'RCTNetwork',

? 'RCTWebSocket',

? ]

? pod'Yoga', :path => './node_modules/react-native/ReactCommon/yoga'

? pod'DoubleConversion', :podspec => './node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'

? pod'GLog', :podspec => './node_modules/react-native/third-party-podspecs/GLog.podspec'

? pod'Folly', :podspec => './node_modules/react-native/third-party-podspecs/Folly.podspec'

....

執(zhí)行pod install

正常情況下Library目錄下會(huì)出現(xiàn)


需手動(dòng)配置Header Search Path,否則會(huì)出現(xiàn)頭文件路徑問題

配置到此完成庐镐,Build->Run恩商。


原生與ReactNative的通信

在AppDelegate中‘注冊’RN

NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios"];//debug模式

NSURL *jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main"withExtension:@"jsbundle"];//離線模式

聲明ASTReactModel

#import <React/RCTEventEmitter.h>

#import <React/RCTBridgeModule.h>

#import <React/RCTEventDispatcher.h>

#import <React/RCTLog.h>

@interface ASTReactModel : RCTEventEmitter?

...

@end

“原生注冊”

RCT_EXPORT_MODULE();//關(guān)鍵

- (NSArray *)supportedEvents {

? ? return @[@"rsaEncrypt",@"rsaDncrypt"]; //這里返回的將是你要發(fā)送的消息名的數(shù)組。

}

- (void)startObserving {

? ? [[NSNotificationCenter defaultCenter] addObserver:self

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? selector:@selector(emitrsaEncrypt:)

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name:@"rsaEncryptEmitted"

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? object:nil];

? ? [[NSNotificationCenter defaultCenter] addObserver:self

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? selector:@selector(emitrsaDncrypt:)

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name:@"rsaDncryptEmitted"

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? object:nil];

}

- (void)stopObserving {

? ? [[NSNotificationCenter defaultCenter] removeObserver:self];

}

- (void)emitrsaEncrypt:(NSNotification*)notification {

? ? [self sendEventWithName:@"rsaEncrypt" body:notification.object];

? ? self.cBlock= notification.object[@"block"];

}

- (void)emitrsaDncrypt:(NSNotification*)notification {

? ? [self sendEventWithName:@"rsaDncrypt" body:notification.object];

}

RN實(shí)現(xiàn)

import {

? AppRegistry,

? StyleSheet,

? Text,

? View,

? NativeModules,

? NativeEventEmitter,

? Alert,

} from 'react-native';

var ASTReactModelFromNative = NativeModules.ASTReactModel;

const managerEmitter = new NativeEventEmitter(ASTReactModelFromNative);

componentWillMount(){

subscription_rsaEncrypt = managerEmitter.addListener(

? ? ? ? 'rsaEncrypt',

? ? ? ? (params) => {

? ? ? ? ? this.rsaEncrypt(params.value, params.publicKey, params.privkey);

? ? ? ? }

? ? );

? ? subscription_rsaDncrypt = managerEmitter.addListener(

? ? ? ? 'rsaDncrypt',

? ? ? ? (params) => {

? ? ? ? ? this.rsaDncrypt(params.value, params.publicKey);

? ? ? ? }

? ? );

}


RSA&AES加解密

static RsaEncrypt(value,publicKey,privkey){

? ? ? ? //對AES加密用到的key加密

? ? ? ? var randomStr = value;//this.randomWord(false,16);

? ? ? ? var encrypt = new RSA.JSEncrypt();

? ? ? ? encrypt.setPublicKey('-----BEGIN PUBLIC KEY-----'+'\n' + publicKey + '\n'+'-----END PUBLIC KEY-----');

? ? ? ? var encrypted = encrypt.encrypt(randomStr);

? ? ? ? return encrypted;

? ? }


PS:遇到的問題

pod install失敗

error: RPC failed;?

curl 18 transfer closed with outstanding read data remaining?

fatal: The remote end hung up unexpectedly?

fatal: early EOF?fatal: index-pack failed

pod過期必逆,更新pod執(zhí)行pod update



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怠堪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子名眉,更是在濱河造成了極大的恐慌粟矿,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件损拢,死亡現(xiàn)場離奇詭異陌粹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)福压,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門掏秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荆姆,你說我怎么就攤上這事蒙幻。” “怎么了胆筒?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵邮破,是天一觀的道長。 經(jīng)常有香客問我,道長抒和,這世上最難降的妖魔是什么矫渔? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮摧莽,結(jié)果婚禮上庙洼,老公的妹妹穿的比我還像新娘。我一直安慰自己范嘱,他們只是感情好送膳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丑蛤,像睡著了一般叠聋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上受裹,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天碌补,我揣著相機(jī)與錄音,去河邊找鬼棉饶。 笑死厦章,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的照藻。 我是一名探鬼主播袜啃,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼幸缕!你這毒婦竟也來了群发?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對情侶失蹤发乔,失蹤者是張志新(化名)和其女友劉穎熟妓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栏尚,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡起愈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了译仗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抬虽。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纵菌,靈堂內(nèi)的尸體忽然破棺而出斥赋,到底是詐尸還是另有隱情,我是刑警寧澤产艾,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響闷堡,放射性物質(zhì)發(fā)生泄漏隘膘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一杠览、第九天 我趴在偏房一處隱蔽的房頂上張望弯菊。 院中可真熱鬧,春花似錦踱阿、人聲如沸管钳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽才漆。三九已至,卻和暖如春佛点,著一層夾襖步出監(jiān)牢的瞬間醇滥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工超营, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸳玩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓演闭,卻偏偏與公主長得像不跟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子米碰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容