개발린생

[안드로이드/Kotlin] SharedPreferences 암호화 사용 본문

Dev Lab ✧.·˚/Android & iOS

[안드로이드/Kotlin] SharedPreferences 암호화 사용

김블루 2022. 11. 9. 20:25

* 이 포스트에 작성된 코드는 Kotlin 언어로 작성하였습니다.

 

<나의 노하우> 카테고리의 첫 포스트는!

많은 분들이 저와 같이 사용하셨을 것이라 생각하여 공유하고자 작성하는 글 입니다.

 

우리는 앱에 데이터를 저장하기 위해 앱 DB인 SQLite도 사용하지만

앱 안에 간단한 데이터를 간단하고 편리하게 저장하고 사용하기 위해 주로 SharedPreferences를 사용합니다.

어떤 기능에 대한 설정 값을 저장하기도 하고 아이디, 비밀번호, 이메일, 전화번호 등 사용자 데이터를 저장하기도 합니다.

 

설정 값 같은 데이터는 노출이 되어도 무관할 수 있으나 아이디, 비밀번호 등 사용자의 민감한 데이터는 노출이 되면 문제가 될 수 있기에 SharedPreferences를 암호화하여 사용해보도록 하겠습니다!!

 

암호화 하지 않은 SharedPreferences 사용과 암호화하여 사용한 EncryptedSharedPreferences

이 두 가지를 비교하며 설명드리겠습니다.

 


1. SharedPreferences (암호화 X)

우선 기본 SharedPreferences는 따로 라이브러리를 추가하지 않아도 사용할 수 있습니다.

 

SharedPreferences 파일 생성

아래 코드를 실행하면 입력한 pref 이름으로 SharedPreferences xml 파일이 생성 됩니다.

val preferences: SharedPreferences = getSharedPreferences("pref", Context.MODE_PRIVATE)
val editor = preferences.edit()

editor.putString("id", "blueland")
editor.putString("pw", "blueland1234")
editor.commit()
data/data/{packageName}/shared_prefs/{fileName}.xml

 

확인 경로 : Android Studio > Device File Explorer

 

SharedPreferences 값

생성된 파일에는 입력한 key, value 값을 가진 데이터가 아래와 같이 저장됩니다.

key value
id blueland
pw blueland1234

 

SharedPreferences pref.xml 파일 데이터 값

 


2. EncryptedSharedPreferences (암호화 O)

 

우선 프로젝트를 생성하고 아래와 같이 androidx security 라이브러리를 추가합니다.

 

라이브러리 추가

dependencies {
	...
    // androidx security
    implementation 'androidx.security:security-crypto-ktx:1.1.0-alpha03'
}

 

 

아래 코드를 실행하면 입력한 pref 이름으로 동일하게 SharedPreferences xml 파일이 생성 됩니다.

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

val preferences: SharedPreferences = EncryptedSharedPreferences.create(
    this,
    "pref",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
val editor: SharedPreferences.Editor = preferences.edit()

editor.putString("id", "blueland")
editor.putString("pw", "blueland1234")
editor.commit()

 

SharedPreferences 암호화 값

생성된 파일에는 입력한 key, value 값을 암호화 한 데이터가 아래와 같이 저장됩니다.

 

SharedPreferences pref.xml 파일 암호화 데이터 값

 

SharedPreferences 사용과 암호화 처리에 대해 확인 해보았습니다.

 


PreferenceManager

SharedPreferences 는 앱 개발 시, 항상 사용하게 되어

PreferenceManager.kt 라는 유틸리티 클래스를 생성하여 사용하고 있습니다.

 

아래와 같이 작성한 클래스를 사용할 Activity, Fragment 등에서 초기화하여 사용하고 있습니다.

 

 

SharedPreferences 암호화 사용 관련, PreferencesManager 클래스 관련

아래 Github 예제 코드 참고하시면 좋을 듯 합니다

 

https://github.com/YuHyeon-Kim/SharedPreferences

 

GitHub - YuHyeon-Kim/SharedPreferences: Android Kotlin - SharedPreferences 암호화

Android Kotlin - SharedPreferences 암호화. Contribute to YuHyeon-Kim/SharedPreferences development by creating an account on GitHub.

github.com