Encrypted Shared Preferences Nedir?

Hasan Polat
Mobiroller Tech
Published in
2 min readSep 4, 2022

Encrypted Shared Preferences, android uygulamalarda sıkça kullanılan Shared Preferences sınıfının genişletilmiş halidir.

Shared Preferences ile verileri saklayabiliriz fakat bu veriler herhangi bir şifreleme yöntemi ile kayıt altına alınmıyor. Bu sebep ile verilerimiz kötü niyetli kişiler tarafından ele geçirilebilir ve bu durum geliştirdiğimiz uygulamanın güvenilirliğini düşürebilir aynı zamanda kullanıcı verilerinin çalınmasına da yol açabilir.

Bu noktada Encrypted Shared Preferences, verilerimizi güvenli ve şifreli olarak tutmamıza olanak sağlıyor

Encrypted Shared Preferences

İlk olarak Android Jetpack’in Security kütüphanesinde tanıtılıyor. Saklamak istediğimiz bütün verileri otomatik olarak şifreleyip çözme özelliğine sahiptir.

Security kütüphanesine ait daha detaylı bilgi almak için aşağıdaki bağlantıyı okuyabilirsiniz.

https://developer.android.com/jetpack/androidx/releases/security

Encrypted Shared Preferences Kullanımı

minSdkVersion 21

İlk olarak, build.gradle (app) içerisine aşağıdaki satırı ekliyoruz.

implementation "androidx.security:security-crypto:1.1.0-alpha03"

Bu aşamadan sonra verileri şifreli olarak tutabilmek için bir şifreleme anahtarına ihtiyacımız var.

Bu anahtar, Master Key olarak tanımlanıyor. Master Key, Android işletim sisteminin en güvenli konumu olan Android Keystore içerisinde AES(Advanced Encryption Standard) şifreleme kullanılarak saklanmaktadır.

val masterKey = MasterKey.Builder(applicationContext, MasterKey.DEFAULT_MASTER_KEY_ALIAS).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build()

Artık Encrypted Shared Preferences kullanımına dair bir örnek gerçekleştirebiliriz. İlk olarak nesnemizi oluşturuyoruz.

val encryptedSharedPreferences = EncryptedSharedPreferences.create(applicationContext, "file_name", masterKey, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)

Verilerin saklanacağı dosya ismini tırnak içerisinde ki değer ile özelleştirebilirsiniz.

Bu aşamadan sonra verileri yazmak ve okumak için kullandığımız metot’lar Shared Preferences ile ortaktır. Örnek olarak bir kullanıcıya ait ad-soyad ve numara bilgisini kayıt etmek isteyelim.

encryptedSharedPreferences.edit()
.putString("fullName","hasan polat")
.putInt("no",123456789)
.apply()

Uygulamayı çalıştırıp sonucu görebilmek için Device File Explorer içerisine giriniz:

Daha sonrasında; data/data/<app.package.name>/shared_prefs/ dizinine bakarsanız buna benzer bir yapının oluştuğunu göreceksiniz.

Encrypted Shared Preferences

Aynı verileri Shared Preferences ile kayıt etmek isteseydik;

Shared Preferences

Sonuç olarak;

  • Encrypted Shared Preferences kullanımı ile hem key hem value değerlerimiz şifrelenerek kayıt altına alınmış oluyor
  • Key-Value değerlerini saklarken ayrıca key ve value için keyset’ler bulunmaktadır. Bu keyset’ler verileri şifrelemek ve çözmek için kullanılan şifrelenmiş anahtar içeririr. Yazının başında oluşturduğumuz master key ise bu keysetleri çözmek için kullanılır.

--

--