In today’s mobile applications, ensuring the privacy and integrity of user data is paramount. Whether you’re developing a banking app, a health tracking platform, or any app that stores sensitive information, securing local storage is essential. One of the most effective tools for this purpose in Android development is EncryptedSharedPreferences
.

What Is EncryptedSharedPreferences?
EncryptedSharedPreferences
is a secure wrapper around the traditional SharedPreferences
API, introduced by Android Jetpack’s Security library. It provides a simple yet powerful way to store key-value pairs locally while ensuring data is encrypted using the Android Keystore system.
How It Works
EncryptedSharedPreferences
uses two levels of encryption:
- AES-256 GCM for encrypting the values
- AES-256 SIV for encrypting the keys
These encryption methods ensure that even if an attacker gains access to the storage files, the data remains unreadable without the proper keys, which are safely managed by the Android Keystore.
Why You Should Use It
- Built-in Encryption: No need to manually manage keys or encryption algorithms.
- Keystore Integration: Keys are stored securely using Android’s trusted Keystore.
- Backward Compatibility: Works on Android 6.0 (API 23) and higher.
- Easy Migration: You can seamlessly migrate from
SharedPreferences
toEncryptedSharedPreferences
.
Implementation Guide
Here’s how to implement EncryptedSharedPreferences
in your app:
Step 1: Add the Security Library
dependencies { implementation "androidx.security:security-crypto:1.1.0-alpha06" }
Note: Always check for the latest version on the official Maven repository.
Step 2: Initialize Secure SharedPreferences
MasterKey masterKey = new MasterKey.Builder(context) .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) .build(); SharedPreferences sharedPreferences = EncryptedSharedPreferences.create( context, "secure_prefs", masterKey, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM );
Step 3: Store and Retrieve Data Securely
// Store sharedPreferences.edit() .putString("user_token", "12345secure") .apply(); // Retrieve String token = sharedPreferences.getString("user_token", null);
Use Cases
- Storing user authentication tokens
- Caching sensitive user preferences
- Securely storing small configuration data
- Offline access credentials
Best Practices
- Avoid storing large files or images in
SharedPreferences
. - Use ProGuard or R8 to obfuscate code, making reverse engineering harder.
- Combine
EncryptedSharedPreferences
with biometric authentication for an extra layer of protection.
Final Thoughts
With increasing concerns over data privacy and security, using EncryptedSharedPreferences
offers a modern and secure approach to storing local data in Android apps. It’s easy to implement and integrates well with existing architecture, making it a smart choice for Android developers who care about security.