일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Jitpack
- 안드로이드
- EncryptedSharedPreferences
- chatGPT
- Developer
- coroutines
- androidstudio
- 모바일앱개발
- 앱개발
- Java
- Kotlin
- SwiftUI
- 코틀린
- 문제개선
- 개발시작
- 문제해결
- 초보개발자
- SharedPreference
- foregroundservice
- WorkManager
- 코루틴
- 클래스 설계
- Swift
- compose
- ios
- 앱심사대응
- 앱심사경험
- 개발자도전기
- 상태관리
- Android
- Today
- Total
개발린생
[안드로이드/Kotlin] SharedPreferences 암호화 사용 본문
* 이 포스트에 작성된 코드는 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
SharedPreferences 값
생성된 파일에는 입력한 key, value 값을 가진 데이터가 아래와 같이 저장됩니다.
key | value |
id | blueland |
pw | blueland1234 |
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 사용과 암호화 처리에 대해 확인 해보았습니다.
PreferenceManager
SharedPreferences 는 앱 개발 시, 항상 사용하게 되어
PreferenceManager.kt 라는 유틸리티 클래스를 생성하여 사용하고 있습니다.
아래와 같이 작성한 클래스를 사용할 Activity, Fragment 등에서 초기화하여 사용하고 있습니다.
SharedPreferences 암호화 사용 관련, PreferencesManager 클래스 관련
아래 Github 예제 코드 참고하시면 좋을 듯 합니다
https://github.com/YuHyeon-Kim/SharedPreferences
'Dev Lab ✧.·˚ > Android & iOS' 카테고리의 다른 글
Android 비동기 작업 처리를 위한 Coroutines과 AsyncTask (8) | 2024.10.20 |
---|---|
Android와 iOS 개발의 공통점 (4) | 2024.10.16 |
현업 안드로이드 앱 개발자의 Android와 iOS 동시 공부 도전기! (5) | 2024.10.15 |
[안드로이드/Kotlin] 일반 권한과 위험 권한 / 앱 권한 요청하기 (0) | 2023.01.17 |
[안드로이드/Kotlin] Room 라이브러리 사용 (0) | 2023.01.17 |