博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React Native开源封装AES,MD5加密模块(react-native-encryption-library)
阅读量:4083 次
发布时间:2019-05-25

本文共 5307 字,大约阅读时间需要 17 分钟。

本文来自:江清清的技术专栏()

开源项目地址:

项目介绍

昨天自己封装了常用的加密方式例如:MD5,AES加密,供React Native进行使用,不过当前项目适配Android平台。

刚创建的React Native交流5群:386216878,欢迎各位大牛,React Native技术爱好者加入交流!

安装配置
1
npm install react-native-encryption-library --save

In android/setting.gradle

1
2
3
...
include
':react-native-encryption-library'
project(
':react-native-encryption-library'
).projectDir =
new
File(rootProject.projectDir,
'../node_modules/react-native-encryption-library/android'
)

In android/app/build.gradle

1
2
3
4
5
...
dependencies {
    
...
    
compile project(
':react-native-encryption-library'
)
}

register module (in MainActivity.java)

On newer versions of React Native (0.18+):

1
2
3
4
5
6
7
8
9
10
11
import
com.chinaztt.encapsulation.EncryptionReactPackager;; 
// <--- import
 
public
class
MainActivity
extends
ReactActivity {
  
......
    
@Override
    
protected
List<ReactPackage> getPackages() {
      
return
Arrays.<ReactPackage>asList(
         
new
EncryptionReactPackager(),
// <------ add here
        
new
MainReactPackage());
    
}
}

On older versions of React Native:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import
com.chinaztt.encapsulation.EncryptionReactPackager;; 
// <--- import
 
public
class
MainActivity
extends
Activity
implements
DefaultHardwareBackBtnHandler {
  
......
 
  
@Override
  
protected
void
onCreate(Bundle savedInstanceState) {
    
super
.onCreate(savedInstanceState);
    
mReactRootView =
new
ReactRootView(
this
);
 
    
mReactInstanceManager = ReactInstanceManager.builder()
      
.setApplication(getApplication())
      
.setBundleAssetName(
"index.android.bundle"
)
      
.setJSMainModuleName(
"index.android"
)
      
.addPackage(
new
MainReactPackage())
      
.addPackage(
new
EncryptionReactPackager())             
// <------ add here
      
.setUseDeveloperSupport(BuildConfig.DEBUG)
      
.setInitialLifecycleState(LifecycleState.RESUMED)
      
.build();
 
    
mReactRootView.startReactApplication(mReactInstanceManager,
"ExampleRN"
,
null
);
 
    
setContentView(mReactRootView);
  
}
 
  
......
 
}
导入模块
1
2
import {NativeModules} from
'react-native'
;
var
EncryptionModule=NativeModules.EncryptionModule
使用实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import React, { Component } from
'react'
;
import {
  
AppRegistry,
  
StyleSheet,
  
Text,
  
View,
  
TouchableHighlight
} from
'react-native'
;
import {NativeModules} from
'react-native'
;
var
EncryptionModule=NativeModules.EncryptionModule
 
//待加密的信息
var
PASSWORD=
'745r#x3g'
;
var
KEY=
'wIEuw3kAGwVNl7BW'
//16位AES加密私钥
 
class CustomButton extends React.Component {
  
render() {
    
return
(
      
<TouchableHighlight
        
style={styles.button}
        
underlayColor=
"#a5a5a5"
        
onPress={
this
.props.onPress}>
        
<Text style={styles.buttonText}>{
this
.props.text}</Text>
      
</TouchableHighlight>
    
);
  
}
}
class react_native_encryption_library extends Component {
  
constructor(props){
     
super
(props);
     
this
.state={
        
result:
''
,
        
AES_Result:
''
,
     
}
  
}
  
async _MD5ByPromise(){
     
try
{
        
var
result=await EncryptionModule.MD5ByPromise(PASSWORD);
        
this
.setState({result:
'Promise:'
+result});
     
}
catch
(e){
        
this
.setState({result:
'MD5加密失败-通过Promise回调'
});
     
}
  
}
  
async _AESEncryptByPromise(){
     
try
{
        
var
result=await EncryptionModule.AESEncryptByPromise(PASSWORD,KEY);
        
this
.setState({AES_Result:result});
     
}
catch
(e){
        
this
.setState({AES_Result:
'AES加密失败-通过Promise回调'
});
     
}
  
}
 
  
async _AESDecryptByPromise(){
     
try
{
        
var
result=await EncryptionModule.AESDecryptByPromise(
this
.state.AES_Result,KEY);
        
this
.setState({AES_Result:result});
     
}
catch
(e){
        
this
.setState({AES_Result:
'AES解密失败-通过Promise回调'
});
     
}
  
}
  
render() {
    
return
(
      
<View style={styles.container}>
        
<Text style={styles.welcome}>
           
加密模块封装实例-Android端
        
</Text>
        
<Text style={
{margin:10,fontSize:12}}>
           
结果:{
this
.state.result}
        
</Text>
        
<CustomButton
           
text=
"测试MD5加密封装-CallBack回调"
           
onPress={()=>EncryptionModule.MD5ByCallBack(PASSWORD,(msg)=>{
               
this
.setState({result:
'CallBack:'
+msg});
          
},(error)=>{
               
this
.setState({result:
'MD5加密失败-通过Callback回调'
});  
          
})}
        
/>
        
<CustomButton
           
text=
"测试MD5加密封装-Promise回调"
           
onPress={()=>
this
._MD5ByPromise()}
        
/>
         
<Text style={
{margin:10,fontSize:12}}>
           
AES结果:{
this
.state.AES_Result}
        
</Text>
        
<CustomButton
           
text=
"测试AES加密封装-CallBack回调"
           
onPress={()=>EncryptionModule.AESEncryptByCallBack(PASSWORD,KEY,(msg)=>{
               
this
.setState({AES_Result:msg});
          
},(error)=>{
               
this
.setState({AES_Result:
'AES加密失败-通过Callback回调'
});  
          
})}
        
/>
        
<CustomButton
           
text=
"测试AES加密封装-Promise回调"
           
onPress={()=>
this
._AESEncryptByPromise()}
        
/>
        
<CustomButton
           
text=
"测试AES解密封装-CallBack回调"
           
onPress={()=>EncryptionModule.AESDecryptByCallBack(
this
.state.AES_Result,KEY,(msg)=>{
               
this
.setState({AES_Result:msg});
          
},(error)=>{
               
this
.setState({AES_Result:
'AES解密失败-通过Callback回调'
});  
          
})}
        
/>
        
<CustomButton
           
text=
"测试AES解密封装-Promise回调"
           
onPress={()=>
this
._AESDecryptByPromise()}
        
/>
      
</View>
    
);
  
}
}
const styles = StyleSheet.create({
  
welcome: {
    
fontSize: 20,
    
textAlign:
'center'
,
    
margin: 10,
  
},
  
button: {
    
margin:5,
    
backgroundColor:
'white'
,
    
padding: 15,
    
borderBottomWidth: StyleSheet.hairlineWidth,
    
borderBottomColor:
'#cdcdcd'
,
  
},
});
AppRegistry.registerComponent(
'encryption_library'
, () => react_native_encryption_library);
运行效果

转载地址:http://crhni.baihongyu.com/

你可能感兴趣的文章
主定理的证明及应用举例
查看>>
线性判别分析(Linear Discriminant Analysis,LDA) 简单分析
查看>>
leetcode刷题(五):分治算法
查看>>
【算法】动态规划算法—买卖股票的最佳时机系列(1-4)
查看>>
想从事分布式系统,计算,hadoop等方面,需要哪些基础,推荐哪些书籍?--转自知乎
查看>>
【经验总结】如何找方向相关(计算机)的论文
查看>>
计算机论文查找
查看>>
计算机方向学术入门经验
查看>>
大牛博士是如何进行文献检索和阅读(好习惯受益终生)
查看>>
【转】台湾教授-如何阅读科研论文
查看>>
《如何写好科研论文》
查看>>
最大长方形 (Maximum Submatrix & Largest Rectangle)(涵盖各种求最大矩形题目)
查看>>
强连通分量之Kosaraju算法
查看>>
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
Dijkstra‘s algorithm (C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>
BFS广搜+贪心 leetcode 1293. 网格中的最短路径
查看>>