안드로이드(kotlin)

안드로이드 코틀린 EncryptedSharedPreferences 사용 방법

기계공학 주인장 2023. 5. 28. 17:51
반응형

안드로이드에서 EncryptedSharedPreferences를 간단히 말하면

 

암호화된 SharedPreference를 의미한다.

 

그렇기 때문에 사용 방법 또한 기존의 SharedPreference와 유사하다.

 

EncryptedSharedPreferences는 주로 토큰 같은 정보를 저장할 때 사용된다.


Dependency 추가

안드로이드에서 EncryptedSharedPreferences를 사용하기 위해서는 

 

다음과 같은 dependency를 추가해야한다.

 

 

보안  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 보안 키를 안전하게 관리하고 파일 및 sharedpreference를 암호화합니다. 이 표에는 androidx.security 그룹의 모든 아

developer.android.com

implementation 'androidx.security:security-crypto-ktx:1.1.0-alpha04'

EncryptedSharedPreferences 를 사용해서 CRUD 구현하기

기본적인 사용 방법은 일반적인 SharedPreference와 동일하다.

 

먼저 EncryptedSharedPreferences를 초기화해야한다.

EncryptedSharedPreferences 초기화 하기
object TokenStore {
    private const val TOKEN_KEY = "token"
    private const val PREFERENCE_NAME = "encrypted_preferences"

	// EncryptedSharedPreferences 초기화
    private fun getSharedPreferences(context: Context): SharedPreferences {
        val masterKey = MasterKey.Builder(context)
            .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
            .build()

        return EncryptedSharedPreferences.create(
            context,
            PREFERENCE_NAME,
            masterKey,
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
        )
    }
}

 

EncryptedSharedPreferences 안에 데이터를 저장하고 가져오는 방법은 다음과 같다.

 

EncryptedSharedPreferences를 사용해서 데이터를 저장하고 가져오기
// 데이터 저장하기
fun saveToken(context: Context, token: String) {
    val sharedPreferences = getSharedPreferences(context)
    with(sharedPreferences.edit()) {
        putString(TOKEN_KEY, token)
        commit()
    }
}

// 데이터 가져오기
fun getToken(context: Context): String {
    val sharedPreferences = getSharedPreferences(context)
    return sharedPreferences.getString(TOKEN_KEY, "") ?: ""
}

 

EncryptedSharedPreferences를 삭제하는 방법도 SharedPreference와 동일하다.

 

EncryptedSharedPreferences 삭제하기
// EncryptedSharedPreferences 제거하기
fun removeToken(context: Context) {
    val sharedPreferences = getSharedPreferences(context)
    with(sharedPreferences.edit()) {
        remove(TOKEN_KEY)
        apply()
    }
}

 

위 코드를 다음과 같은 방법으로 사용할 수 있다.


EncryptedSharedPreferences 사용하기

 

Activity, Fragment 둘 다 동일한 방법으로 사용할 수 있다.

 

Activity 또는 Fragment에서
// EncryptedSharedPreferences로 데이터 저장하기
binding.freeButton1.setOnSingleClickListener {
    Timber.d("clicked time: ${Calendar.getInstance()}")
    TokenStore.saveToken(requireContext(), "secret")
    Toast.makeText(requireContext(), "Encrypted data is saved", Toast.LENGTH_SHORT).show()
}

// EncryptedSharedPreferences에 저장된 데이터 가져오기
binding.freeButton2.setOnSingleClickListener {
    Timber.d("clicked time: ${Calendar.getInstance()}")
    val decryptedData = TokenStore.getToken(requireContext())
    Toast.makeText(requireContext(), "decryptedData is $decryptedData", Toast.LENGTH_SHORT).show()
}

 

반응형