티스토리 뷰

반응형

Security Library를 사용하여 SharedPreference를 암호화할 수 있습니다.

 

 

기본 SharedPreference 사용하기

 

PreferenceManager.kt

class PreferenceManager(context: Context) {

    private val pref = PreferenceManager.getDefaultSharedPreferences(context)

    fun getData(key: String): String? = pref.getString(key, null)

    fun setData(key : String, value : String) = pref.edit().putString(key, value).commit()
}

 

PreferenceManger라는 SharedPreference를 사용할 수 있도록 해주는 Class를 만들었습니다.

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val pref = PreferenceManager(this)

        button.setOnClickListener {
            pref.setData("data", editText.text.toString())
            textView.text = editText.text.toString()
        }

        textView.text = pref.getData("data") ?: ""
    }
}

 

MainActivity에서는 PreferenceManger Class를 사용하여 값을 저장하고 불러오는 코드를 작성하였습니다.

 

 

실행하면 아래와 같이 동작합니다.

 

 

SharedPreference는 앱 내부 데이터에 값을 저장합니다.

 

 

저장된 SharedPreference 확인하기

 

 

앱을 빌드를 하고 View > Tool Windows > Device File Explorer를 누릅니다.

 

 

 

그리고 아래 경로에서 확인하면 됩니다.

data/data/(package_name)/shared_prefs/SharedPreference

 

 

 

 

값이 저장되어 있는 것을 확인할 수 있습니다.

 

 

 

Security Library 사용하기

 

Security Library는 마시멜로 ( sdk 23 ) 이상부터 사용 가능합니다.

 

build.gradle에 아래 코드를 추가해줍니다.

dependencies {
    ...
    
    implementation "androidx.security:security-crypto:1.1.0-alpha02"
}

 

 

그리고 PreferenceManager 클래스의 pref 변수를 아래와 같이 수정해주면 됩니다.

private val pref: SharedPreferences by lazy {
    val keyGenParameterSpec = MasterKeys.AES256_GCM_SPEC
    val masterKeyAlias = MasterKeys.getOrCreate(keyGenParameterSpec)

    EncryptedSharedPreferences.create(
        "여기에 원하는 파일 이름",
        masterKeyAlias,
        context,
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
        EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
    )
}

 

실행을 하고 테스트를 하면 아래와 같이 값이 암호화되어 저장됩니다.

 

 

 

반응형
댓글