How to Encrypt data in React native (Using Expo)

Viewed 5587

I'm trying to simply encrypt a message using a given key and iV. I've tried several libraries to achieve this but Expo isn't compatible with any of them. I couldn't find any encryption libraries for Expo (That support AES). I guess my question is : How do I encrypt data in React Native running Expo

Ps : I am not interested in expo-crypto

5 Answers

Another possibility (what I did) is to use the CryptoES library.

https://www.npmjs.com/package/crypto-es

After long search I found it, it is a continued development of the 3.1 version of the CryptoJS library and can be used with Expo.

npm i --save crypto-es crypto-js 
import CryptoES from "crypto-es";

Then you should encrypt the text, for example:

var mytexttoEncryption = "Hello" 
const encrypted = CryptoES.AES.encrypt(mytexttoEncryption ,"your password").toString();

var C = require("crypto-js");

var Decrypted = C.AES.decrypt(E, "your password");
var result =Decrypted.toString(C.enc.Utf8);

console.log(result)

Use crypto-js@3.1 , 3.1.x version use Math.random() and doesn't require node "crypto" package. It's not as safe as the latest version but works for me.

yarn add crypto-js@3.1 

I only use it for decrypting. If you really need it for some security requirements I suggest you encrypt it in server node enviroment.

I decided to use jshashes for my React-native & Expo project. The goal of this module is to reimplement hash node's crypto functions in pure javascript without dependency on node:

yarn add jshashes

first use this command :

npm i crypto-es 

then now you should import it with this command :

import CryptoES from "crypto-es";

then you should encrypt the text : for example :

var mytexttoEncryption = "Hello" 
const encrypted = CryptoES.AES.encrypt(mytexttoEncryption ,"your password").toString();

now for decryption : install the package of crypto-js with this command :

npm i crypto-js 

then lets decrypt it

var C = require("crypto-js");

 var Decrypted = C.AES.decrypt(E, "your password");
var result =Decrypted.toString(C.enc.Utf8);

console.log(result)

so use this it will be ok

Related