Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/afiqiqmal/sharedchamber
Android Secure SharedPreferences Using Facebook Conceal Encryption
https://github.com/afiqiqmal/sharedchamber
android android-secure-sharedpreferences conceal concealsharedpreference-android decryption encryption facebook hacktoberfest java proguard secure-android-sharedpreferences sharedpreferences simple
Last synced: 3 months ago
JSON representation
Android Secure SharedPreferences Using Facebook Conceal Encryption
- Host: GitHub
- URL: https://github.com/afiqiqmal/sharedchamber
- Owner: afiqiqmal
- License: mit
- Created: 2017-03-23T10:12:33.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2020-09-08T03:04:09.000Z (over 4 years ago)
- Last Synced: 2024-05-21T02:22:21.046Z (8 months ago)
- Topics: android, android-secure-sharedpreferences, conceal, concealsharedpreference-android, decryption, encryption, facebook, hacktoberfest, java, proguard, secure-android-sharedpreferences, sharedpreferences, simple
- Language: Java
- Homepage:
- Size: 609 KB
- Stars: 95
- Watchers: 4
- Forks: 13
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SharedChamber Android
[![](https://jitpack.io/v/afiqiqmal/SharedChamber.svg)](https://jitpack.io/#afiqiqmal/SharedChamber) [![API](https://img.shields.io/badge/API-16%2B-blue.svg?style=flat)](https://android-arsenal.com/api?level=16)
[![](https://img.shields.io/badge/Project-Java-brightgreen.svg)](https://github.com/afiqiqmal/SharedChamber)
[![](https://img.shields.io/badge/Project-Kotlin-yellowgreen.svg)](https://github.com/afiqiqmal/SharedChamber-Kotlin)
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/paypalme/mhi9388?locale.x=en_US)Project : SharedChamber on top of SharedPreferences using [Facebook Conceal](http://facebook.github.io/conceal/)
Description
Conceal provides a set of Java APIs to perform cryptography on Android. It was designed to be able to encrypt large files on disk in a fast and memory efficient manner. Implementation on SharedPreferences of Android would be great data Encryption and Decryption. Currently supported Facebook Conceal V2.0## Installation
Gradle
```gradle
dependencies {
implementation 'com.github.afiqiqmal:SharedChamber:2.5.1'//or
implementation 'com.github.afiqiqmal:SharedChamber:2.5.1' {
exclude group: 'com.google.code.gson', module: 'gson'
}
}
```Maven
```mavencom.github.afiqiqmal
SharedChamber
2.5.0```
## Usage
#### First of All
it needed to first init in Application class in `oncreate` method or on Base Activity Class. or everything is not working =D
```java
SharedChamber.initChamber(this);
```Permission need to use in your project. Please Allow it first if you need to use file save, or it will affect `.putImage` and `.putFile` method
```xml```
##### Initialize
```java
SharedChamber sharedChamber = new SharedChamber.ChamberBuilder(this)
//.useThisPrefStorage("Android_Prefs")
.setChamberType(ChamberType.KEY_256) //ChamberType.KEY_256 or ChamberType.KEY_128
.enableCrypto(true,true) //param 1 - enable value encryption , param 2 - enable key encryption
.enableKeyPrefix(true, "walaoweh") //1- if false, prefix will be ignore
.setPassword("Android") //default value - BuildConfig.APPLICATION_ID
.setFolderName("testing") //create Folder for data stored: default is - "conceal_path"
.setPrefListener(this) // listen to data changes
.buildChamber();*setFolderName - folder will be hidden. To see, enable show hidden folder in storage
- data stored here only images and files
- sharedpreferences are not store here
- created folder by default YOURSTORAGE/.conceal_path/images- for images - in folder /images
- for files - in folder /files
```##### Save data
```java
sharedChamber.put(KEY,"Hello");
sharedChamber.put(KEY,1000000);
sharedChamber.put(KEY,100.00);
sharedChamber.put(KEY,new byte[]);
sharedChamber.put(KEY,new Map());
...
...
```for complex object might need use `putModel` which use gson
```
sharedChamber.putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), User.class));
sharedChamber.putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), new TypeToken>(){}.getType()));
```Files and Images
```
// Files and Images will be encrypted
// prefix of this encrypted images and files start with "conceal_enc_";
File getFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/testing.pdf");
sharedChamber.putFile(KEY,getFile,boolean deleteOldFiles);
// deleteOldFiles - true or false.. true - will delete choosen file and move to new path//put images
sharedChamber.put(KEY, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
sharedChamber.put(KEY, File file);
sharedChamber.putDrawable(KEY, Drawable ID);
...
...
```##### For Method Chaining
```java
new SharedChamber.Editor("PREFIX") // optional - get default from global prefix
.put(KEY,"Hello")
.put(KEY,1000000)
.put(KEY,true)
.put(KEY,new byte[])
.put(KEY,getFile,boolean deleteOldFiles);
.put(KEY, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.put(KEY, imageFile)
.put(KEY,STRING_LIST)
.put(KEY,FLOAT_LIST)
.putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), User.class));
...
...
.apply(); //.commit();
```##### Get total data
```java
System.out.println(sharedChamber.getPrefsSize());
```##### Get all sharedpreferences data
```java
Map getAll = sharedChamber.getEverythingInChamberInMap();
```##### Get all sharedpreferences data in List String
```java
List getAll = sharedChamber.getEverythingInChamberInList();
```##### Get all encrypted Files inside created folder
```java
List getFiles = sharedChamber.getAllChamberFiles();
```##### Fetching data
```java
sharedChamber.getString(KEY);
sharedChamber.getString(KEY,DEFAULT_VALUE);
sharedChamber.getInt(KEY);
sharedChamber.getInt(KEY,DEFAULT_VALUE);
sharedChamber.getDouble(KEY);
sharedChamber.getDouble(KEY,DEFAULT_VALUE);//using gson
sharedChamber.getModel(KEY, User.class).toString();
sharedChamber.getModel(KEY, new TypeToken>(){}.getType()).toString();
.....Bitmap bitmap = sharedChamber.getImage(KEY); //return String path
File enc_file = sharedChamber.getFile(KEY,true); //return File
// this getImage and getFile will totally decrypted selected file/image. You need to encrypt it back.
// just call sharedChamber.putImage(KEY,bitmap); or sharedChamber.putFile(KEY,enc_file,true);
........
```##### Clear key and SharedPreferences
```java
sharedChamber.destroyChamber(); //clear key
sharedChamber.clearChamber(); // clear allsharedChamber.remove(KEY1,KEY2,KEY3,KEY4) //String... keys
sharedChamber.removeFile(KEY); //delete assosiate file (images and files) return boolean
```##### Check if key exists
```java
sharedChamber.contains(KEY); // return boolean
```##### Get SharedPreferences
```java
sharedChamber.getChamber();
```##### Listener Data Changes
```java
public class BaseActivity extends AppCompatActivity implements OnDataChamberChangeListener{
....
@Override
public void onDataChange(String key,String value) {
//code here
}
}
```##### Easier Save User Detail Preferences
```java
new SharedChamber.UserChamber()
.setFirstName("Firstname")
.setLastName("Lasname")
.setEmail("[email protected]")
.....
.apply(); // need to apply() or commit()
```or
```java
SharedChamber.UserChamber().applyFirstName("Firstname"); //directly apply
SharedChamber.UserChamber().applyLastName("Firstname"); //directly apply
```##### Get User Detail
```java
new SharedChamber.UserChamber().getFirstName()
new SharedChamber.UserChamber().getLastName()
new SharedChamber.UserChamber().getEmail()
.....
```##### Key prefix - Apply key with prefix
```java
new SharedChamber.UserChamber("KEY PREFIX").setFirstName("Firstname").apply();
new SharedChamber.UserChamber("KEY PREFIX").setLastName("Firstname").apply();
```### Extra Usage for Conceal Encryption and Decryption
```java
SecretChamber secretChamber = new SecretBuilder(this)
.setEnableValueEncryption(true) //default true
.setEnableKeyEncryption(true) // default true
.setChamberType(ChamberType.KEY_256) // ChamberType.KEY_256 or ChamberType.KEY_128
.setPassword("Mac OSX")
.buildSecret();
```##### Hash
```
secretChamber.vaultHash(plaintext); // SHA-256
```##### Encrypt
```
secretChamber.lockVault(test); // encrypt using facebook conceal
secretChamber.lockVaultBase(test,4); // encrypt using basic base64 with iteration
secretChamber.lockVaultAes("Hello World is World Hello Aes Cryption"); // encrypt using AES//1-parameter is original location of file..it will move to other location set as in initialization
secretChamber.lockVaultFile(File file,boolean deleteOldFile);```
##### Decrypt
```
secretChamber.openVault(cipher); // decrypt using facebook conceal
secretChamber.openVaultBase(cipher,4); // decrypt using basic base64 with iteration
secretChamber.openVaultAes(cipher); // decrypt using AESsecretChamber.openVaultFile(File file,boolean deleteOldFile);
```## Proguard
```proguard
-keep class com.facebook.crypto.** { *; }
-keep class com.facebook.jni.** { *; }
-keepclassmembers class com.facebook.cipher.jni.** { *; }
-dontwarn com.facebook.**
```# TODO
1. Set Preferences for specific user
2. Able to switch Preferences between user## Credit
[Facebook Conceal](http://facebook.github.io/conceal/) - Conceal provides easy Android APIs for performing fast encryption and authentication of data.
Documentation - [Here](http://facebook.github.io/conceal/)## Licence
open source project that is licensed under the [MIT license](http://opensource.org/licenses/MIT). Please refer to the license file for more information.