Comments (1)
it seems to be crashing decrypting the key, so i just did this to get around it
public void handlePasswordChange(String newPassword, Context context) throws GeneralSecurityException {
final byte[] salt = getDeviceSerialNumber(context).getBytes();
AesCbcWithIntegrity.SecretKeys newKey= AesCbcWithIntegrity.generateKeyFromPassword(newPassword,salt);
Map<String, ?> allOfThePrefs = sharedPreferences.getAll();
Map<String, String> unencryptedPrefs = new HashMap<String, String>(allOfThePrefs.size());
Iterator<String> keys = allOfThePrefs.keySet().iterator();
//iterate through the current prefs unencrypting each one
String keyPrefKey = "";
while(keys.hasNext()) {
String prefKey = keys.next();
Object prefValue = allOfThePrefs.get(prefKey);
if(prefValue instanceof String){
//all the encrypted values will be Strings
final String prefValueString = (String)prefValue;
String keysString = this.keys.toString();
if (prefValueString.equalsIgnoreCase(keysString)) {
keyPrefKey = prefKey;
continue;
}
final String plainTextPrefValue = decrypt(prefValueString);
unencryptedPrefs.put(prefKey, plainTextPrefValue);
}
}
//destroy and clear the current pref file
destroyKeys();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.apply();
//refresh the sharedPreferences object ref: I found it was retaining old ref/values
sharedPreferences = null;
sharedPreferences = getSharedPreferenceFile(context, sharedPrefFilename);
//assign new key
this.keys = newKey;
SharedPreferences.Editor updatedEditor = sharedPreferences.edit();
//iterate through the unencryptedPrefs encrypting each one with new key
Iterator<String> unencryptedPrefsKeys = unencryptedPrefs.keySet().iterator();
while (unencryptedPrefsKeys.hasNext()) {
String prefKey = unencryptedPrefsKeys.next();
String prefPlainText = unencryptedPrefs.get(prefKey);
updatedEditor.putString(prefKey, encrypt(prefPlainText));
}
updatedEditor.commit();
//save new key
updatedEditor.putString(keyPrefKey, this.keys.toString()).commit();
}
also one issue i found was in following method after doing handlePasswoordChange
private SharedPreferences getSharedPreferenceFile(Context context, String prefFilename) {
this.sharedPrefFilename = sharedPrefFilename ;
this caused the filename to be null and created new pref file. needs to be
private SharedPreferences getSharedPreferenceFile(Context context, String prefFilename) {
this.sharedPrefFilename = prefFilename;
from secure-preferences.
Related Issues (20)
- Fix getAll method to return the correct value for StringSet. HOT 2
- AndroidQ will no longer support android.preference. HOT 1
- Android 10 - android.preference deprecated HOT 1
- Security alert on our production app on google play console
- Android Canary 3.6 not building HOT 3
- Value can't be saved when put value after clear() and kill app in background. HOT 1
- DeterministicAeadFactory.java line 13
- Flutter HOT 1
- How to use sharedPreference in flutter to stay user loggedin in flutter using a setBool and GetBool HOT 2
- [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences)
- java.security.KeyStoreException: the master key android-keystore://_androidx_security_master_key_ exists but is unusable
- Create tag 0.1.7 HOT 1
- SecurePreferences.getString() throws java.lang.IllegalStateException HOT 1
- Crashing in API 28 (Android Pie) s== null (DO NOT USE THIS LIBRARY, it is completely broken) HOT 22
- Does this library needs to update the TragetSDKversion to 26? HOT 1
- After upgrade Android OS Version 9 (pie) the values are not stored and retrieved. HOT 5
- all sharedPrefrences remove after app crash's
- Security Scan failed
- securePref.getAll() return map where only values decrypted and keys encrypted HOT 1
- After updating to Android Q, i am not able to retrieve the data from the Secure preferences? HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from secure-preferences.