1- # Conceal SharedPreferences Android
1+ # SharedChamber Android
22[ ![ ] ( https://jitpack.io/v/afiqiqmal/ConcealSharedPreference-Android.svg )] ( https://jitpack.io/#afiqiqmal/ConcealSharedPreference-Android ) [ ![ API] ( https://img.shields.io/badge/API-16%2B-blue.svg?style=flat )] ( https://android-arsenal.com/api?level=16 ) [ ![ Android Arsenal] ( https://img.shields.io/badge/Android%20Arsenal-ConcealSharedPreference--Android-brightgreen.svg?style=flat )] ( https://android-arsenal.com/details/1/5448 )
33
4- <b >Project :</b > Secure Android SharedPreferences Using Conceal Crypto by Facebook<br >
4+ <b >Project :</b > SharedChamber on top of SharedPreferences using [ Facebook Conceal ] ( http://facebook.github.io/conceal/ ) <br >
55<b >Description </b >
66<br >
77Conceal 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
@@ -11,11 +11,11 @@ Conceal provides a set of Java APIs to perform cryptography on Android. It was d
1111Gradle
1212``` gradle
1313dependencies {
14- compile 'com.github.afiqiqmal:ConcealSharedPreference-Android:1.5.5 '
14+ compile 'com.github.afiqiqmal:SharedChamber:2.0.0 '
1515
1616 //or
1717
18- compile 'com.github.afiqiqmal:ConcealSharedPreference-Android:1.5.5 ' {
18+ compile 'com.github.afiqiqmal:SharedChamber:2.0.0 ' {
1919 exclude group: 'com.google.code.gson', module: 'gson'
2020 }
2121}
@@ -25,42 +25,38 @@ Maven
2525``` maven
2626<dependency>
2727 <groupId>com.github.afiqiqmal</groupId>
28- <artifactId>ConcealSharedPreference-Android </artifactId>
29- <version>1.5.2 </version>
28+ <artifactId>SharedChamber </artifactId>
29+ <version>2.0.0 </version>
3030</dependency>
3131```
3232
33- ## Method
34-
35- [ ![ ] ( http://image.ibb.co/cQpGZb/Screen_Shot_2017_12_01_at_7_31_42_PM.png )] ( )
36-
3733## Usage
3834
3935#### First of All
4036
4137it needed to first init in Application class in ` oncreate ` method or on Base Activity Class. or everything is not working =D
4238``` java
43- ConcealPrefRepository . applicationInit (this );
39+ SharedChamber . initChamber (this );
4440```
4541
4642
47- Permission need to use in your project. Please Allow it first, or it will affect ` .putImage ` and ` .putFile ` method
43+ 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
4844``` xml
4945<uses-permission android : name =" android.permission.WRITE_EXTERNAL_STORAGE" />
5046<uses-permission android : name =" android.permission.READ_EXTERNAL_STORAGE" />
5147```
5248
5349##### Initialize
5450``` java
55- ConcealPrefRepository concealPrefRepository = new ConcealPrefRepository . PreferencesBuilder (this )
51+ SharedChamber sharedChamber = new SharedChamber . ChamberBuilder (this )
5652 // .useThisPrefStorage("Android_Prefs")
57- .sharedPrefsBackedKeyChain( CryptoType . KEY_256 ) // CryptoType .KEY_256 or CryptoType .KEY_128
53+ .setChamberType( ChamberType . KEY_256 ) // ChamberType .KEY_256 or ChamberType .KEY_128
5854 .enableCrypto(true ,true ) // param 1 - enable value encryption , param 2 - enable key encryption
5955 .enableKeyPrefix(true , " walaoweh" ) // 1- if false, prefix will be ignore
60- .createPassword (" Android" ) // default value - BuildConfig.APPLICATION_ID
56+ .setPassword (" Android" ) // default value - BuildConfig.APPLICATION_ID
6157 .setFolderName(" testing" ) // create Folder for data stored: default is - "conceal_path"
6258 .setPrefListener(this ) // listen to data changes
63- .create ();
59+ .buildChamber ();
6460
6561* setFolderName - folder will be hidden. To see, enable show hidden folder in storage
6662 - data stored here only images and files
@@ -74,19 +70,19 @@ ConcealPrefRepository concealPrefRepository = new ConcealPrefRepository.Preferen
7470##### Save data
7571
7672``` java
77- concealPrefRepository . put(KEY ," Hello" );
78- concealPrefRepository . put(KEY ,1000000 );
79- concealPrefRepository . put(KEY ,100.00 );
80- concealPrefRepository . put(KEY ,new byte []);
81- concealPrefRepository . put(KEY ,new Map<String ,String > ());
73+ sharedChamber . put(KEY ," Hello" );
74+ sharedChamber . put(KEY ,1000000 );
75+ sharedChamber . put(KEY ,100.00 );
76+ sharedChamber . put(KEY ,new byte []);
77+ sharedChamber . put(KEY ,new Map<String ,String > ());
8278...
8379...
8480```
8581
8682for complex object might need use ` putModel ` which use gson
8783```
88- concealPrefRepository .putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), User.class));
89- concealPrefRepository .putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), new TypeToken<ArrayList<Users>>(){}.getType()));
84+ sharedChamber .putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), User.class));
85+ sharedChamber .putModel(KEY, new Gson().fromJson(loadJSONFromAsset(context, "users.json"), new TypeToken<ArrayList<Users>>(){}.getType()));
9086```
9187
9288
@@ -95,20 +91,20 @@ Files and Images
9591// Files and Images will be encrypted
9692// prefix of this encrypted images and files start with "conceal_enc_";
9793File getFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/testing.pdf");
98- concealPrefRepository .putFile(KEY,getFile,boolean deleteOldFiles);
94+ sharedChamber .putFile(KEY,getFile,boolean deleteOldFiles);
9995// deleteOldFiles - true or false.. true - will delete choosen file and move to new path
10096
10197//put images
102- concealPrefRepository .put(KEY, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
103- concealPrefRepository .put(KEY, File file);
104- concealPrefRepository .putDrawable(KEY, Drawable ID);
98+ sharedChamber .put(KEY, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
99+ sharedChamber .put(KEY, File file);
100+ sharedChamber .putDrawable(KEY, Drawable ID);
105101...
106102...
107103```
108104
109105##### <b >For Method Chaining</b >
110106``` java
111- new ConcealPrefRepository .Editor (" PREFIX" ) // optional - get default from global prefix
107+ new SharedChamber .Editor (" PREFIX" ) // optional - get default from global prefix
112108 .put(KEY ," Hello" )
113109 .put(KEY ,1000000 )
114110 .put(KEY ,true )
@@ -126,69 +122,69 @@ new ConcealPrefRepository.Editor("PREFIX") // optional - get default from global
126122
127123##### <b >Get total data</b >
128124``` java
129- System . out. println(concealPrefRepository . getPrefsSize());
125+ System . out. println(sharedChamber . getPrefsSize());
130126```
131127
132128##### <b >Get all sharedpreferences data</b >
133129``` java
134- Map<String ,String > getAll = concealPrefRepository . getAllSharedPrefData ();
130+ Map<String ,String > getAll = sharedChamber . getEverythingInChamberInMap ();
135131```
136132
137133##### <b >Get all sharedpreferences data in List String</b >
138134``` java
139- List<String > getAll = concealPrefRepository . getAllSharedPrefDataToString ();
135+ List<String > getAll = sharedChamber . getEverythingInChamberInList ();
140136```
141137
142138##### <b >Get all encrypted Files inside created folder</b >
143139``` java
144- List<CryptoFile > getFiles = concealPrefRepository . getAllConcealEncryptedFiles ();
140+ List<CryptoFile > getFiles = sharedChamber . getAllChamberFiles ();
145141```
146142
147143##### <b >Fetching data</b >
148144
149145``` java
150- concealPrefRepository . getString(KEY );
151- concealPrefRepository . getString(KEY ,DEFAULT_VALUE );
152- concealPrefRepository . getInt(KEY );
153- concealPrefRepository . getInt(KEY ,DEFAULT_VALUE );
154- concealPrefRepository . getDouble(KEY );
155- concealPrefRepository . getDouble(KEY ,DEFAULT_VALUE );
146+ sharedChamber . getString(KEY );
147+ sharedChamber . getString(KEY ,DEFAULT_VALUE );
148+ sharedChamber . getInt(KEY );
149+ sharedChamber . getInt(KEY ,DEFAULT_VALUE );
150+ sharedChamber . getDouble(KEY );
151+ sharedChamber . getDouble(KEY ,DEFAULT_VALUE );
156152
157153// using gson
158- concealPrefRepository . getModel(KEY , User . class). toString();
159- concealPrefRepository . getModel(KEY , new TypeToken<ArrayList<Task > > (){}. getType()). toString();
154+ sharedChamber . getModel(KEY , User . class). toString();
155+ sharedChamber . getModel(KEY , new TypeToken<ArrayList<Task > > (){}. getType()). toString();
160156.....
161157
162- Bitmap bitmap = concealPrefRepository . getImage(KEY ); // return String path
163- File enc_file = concealPrefRepository . getFile(KEY ,true ); // return File
158+ Bitmap bitmap = sharedChamber . getImage(KEY ); // return String path
159+ File enc_file = sharedChamber . getFile(KEY ,true ); // return File
164160// this getImage and getFile will totally decrypted selected file/image. You need to encrypt it back.
165- // just call concealPrefRepository .putImage(KEY,bitmap); or concealPrefRepository .putFile(KEY,enc_file,true);
161+ // just call sharedChamber .putImage(KEY,bitmap); or sharedChamber .putFile(KEY,enc_file,true);
166162........
167163```
168164
169165##### <b >Clear key and SharedPreferences</b >
170166
171167``` java
172- concealPrefRepository . destroyCrypto (); // clear key
173- concealPrefRepository . destroySharedPreferences (); // clear all
168+ sharedChamber . destroyChamber (); // clear key
169+ sharedChamber . clearChamber (); // clear all
174170
175- concealPrefRepository . remove(KEY1 ,KEY2 ,KEY3 ,KEY4 ) // String... keys
176- concealPrefRepository . removeFile(KEY ); // delete assosiate file (images and files) return boolean
171+ sharedChamber . remove(KEY1 ,KEY2 ,KEY3 ,KEY4 ) // String... keys
172+ sharedChamber . removeFile(KEY ); // delete assosiate file (images and files) return boolean
177173```
178174
179175##### <b >Check if key exists</b >
180176``` java
181- concealPrefRepository . contains(KEY ); // return boolean
177+ sharedChamber . contains(KEY ); // return boolean
182178```
183179
184180##### <b >Get SharedPreferences</b >
185181``` java
186- concealPrefRepository . getPreferences ();
182+ sharedChamber . getChamber ();
187183```
188184
189185##### <b >Listener Data Changes</b >
190186``` java
191- public class BaseActivity extends AppCompatActivity implements OnDataChangeListener {
187+ public class BaseActivity extends AppCompatActivity implements OnDataChamberChangeListener {
192188 ....
193189 @Override
194190 public void onDataChange (String key ,String value ) {
@@ -199,7 +195,7 @@ public class BaseActivity extends AppCompatActivity implements OnDataChangeListe
199195
200196##### <b >Easier Save User Detail Preferences</b >
201197``` java
202- new ConcealPrefRepository . UserPref ()
198+ new SharedChamber . UserChamber ()
203199.setFirstName(" Firstname" )
204200.setLastName(" Lasname" )
205201@@ -210,72 +206,63 @@ new ConcealPrefRepository.UserPref()
210206or
211207
212208``` java
213- ConcealPrefRepository . UserPref (). applyFirstName(" Firstname" ); // directly apply
214- ConcealPrefRepository . UserPref (). applyLastName(" Firstname" ); // directly apply
209+ SharedChamber . UserChamber (). applyFirstName(" Firstname" ); // directly apply
210+ SharedChamber . UserChamber (). applyLastName(" Firstname" ); // directly apply
215211```
216212
217213##### <b >Get User Detail</b >
218214``` java
219- new ConcealPrefRepository . UserPref (). getFirstName()
220- new ConcealPrefRepository . UserPref (). getLastName()
221- new ConcealPrefRepository . UserPref (). getEmail()
215+ new SharedChamber . UserChamber (). getFirstName()
216+ new SharedChamber . UserChamber (). getLastName()
217+ new SharedChamber . UserChamber (). getEmail()
222218.....
223219```
224220
225221##### <b >Key prefix - Apply key with prefix</b >
226222``` java
227- new ConcealPrefRepository . UserPref (" KEY PREFIX" ). setFirstName(" Firstname" ). apply();
228- new ConcealPrefRepository . UserPref (" KEY PREFIX" ). setLastName(" Firstname" ). apply();
223+ new SharedChamber . UserChamber (" KEY PREFIX" ). setFirstName(" Firstname" ). apply();
224+ new SharedChamber . UserChamber (" KEY PREFIX" ). setLastName(" Firstname" ). apply();
229225```
230226
231227
232228### Extra Usage for Conceal Encryption and Decryption
233229
234230``` java
235- ConcealCrypto concealCrypto = new ConcealCrypto (this ,CryptoType . KEY_256 ); // CryptoType.KEY_256 or CryptoType.KEY_128
236- concealCrypto. setEnableValueEncryption(true ); // default true
237- concealCrypto. setEnableKeyEncryption(true ); // default true
238- concealCrypto. setmEntityPassword(" Android" );
239- concealCrypto. setmEntityPassword(Entity . create(" Android" ));
240- ```
241-
242- OR
243- ``` java
244- ConcealCrypto concealCrypto = new ConcealCrypto .CryptoBuilder (this )
231+ SecretChamber secretChamber = new SecretBuilder (this )
245232 .setEnableValueEncryption(true ) // default true
246233 .setEnableKeyEncryption(true ) // default true
247- .setKeyChain( CryptoType . KEY_256 ) // CryptoType .KEY_256 or CryptoType .KEY_128
248- .createPassword (" Mac OSX" )
249- .create ();
234+ .setChamberType( ChamberType . KEY_256 ) // ChamberType .KEY_256 or ChamberType .KEY_128
235+ .setPassword (" Mac OSX" )
236+ .buildSecret ();
250237```
251238
252239##### Hash
253240
254241```
255- concealCrypto.hashKey (plaintext); // SHA-256
242+ secretChamber.vaultHash (plaintext); // SHA-256
256243```
257244
258245##### Encrypt
259246
260247```
261- concealCrypto.obscure (test); // encrypt using facebook conceal
262- concealCrypto.obscureWithIteration (test,4); // encrypt using basic base64 with iteration
263- concealCrypto.aesEncrypt ("Hello World is World Hello Aes Cryption"); // encrypt using AES
248+ secretChamber.lockVault (test); // encrypt using facebook conceal
249+ secretChamber.lockVaultBase (test,4); // encrypt using basic base64 with iteration
250+ secretChamber.lockVaultAes ("Hello World is World Hello Aes Cryption"); // encrypt using AES
264251
265252//1-parameter is original location of file..it will move to other location set as in initialization
266- concealCrypto.obscureFile (File file,boolean deleteOldFile);
253+ secretChamber.lockVaultFile (File file,boolean deleteOldFile);
267254
268255```
269256
270257
271258##### Decrypt
272259
273260```
274- concealCrypto.deObscure (cipher); // decrypt using facebook conceal
275- concealCrypto.deObscureWithIteration (cipher,4); // decrypt using basic base64 with iteration
276- concealCrypto.aesDecrypt (cipher); // decrypt using AES
261+ secretChamber.openVault (cipher); // decrypt using facebook conceal
262+ secretChamber.openVaultBase (cipher,4); // decrypt using basic base64 with iteration
263+ secretChamber.openVaultAes (cipher); // decrypt using AES
277264
278- concealCrypto.deObscureFile (File file,boolean deleteOldFile);
265+ secretChamber.openVaultFile (File file,boolean deleteOldFile);
279266```
280267
281268
0 commit comments