전화번호나 비밀번호 등 민감한 개인정보를 로컬에 저장하기 위해서는 상용화 되어 있는 AES256이나 MD5같은 암호화 알고리즘 함수를 사용하여 SharedPreferences로 저장하거나 sqlite 또는 realm 등 로컬 db에 저장하고 꺼내오면서 사용을 했었다. 하지만 이제 그럴 필요없이 "암호화 + SharedPreferences 저장"을 한방에 해결할 수 있는 방법이 제공되었다.(제공된지 좀 되긴 했지만 ...)
developer android의 내용을 먼저 읽어보길 바란다.
[app/build.gradle]
implementation "androidx.security:security-crypto:1.0.0-alpha02"
[변수 선언]
lateinit var masterKeyAlias: String
lateinit var sharedPreferences: SharedPreferences
[initialize]
masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
sharedPreferences = EncryptedSharedPreferences.create(
"your_encrypted_shared_prefs_file_name",
masterKeyAlias,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
[example]
/**
* 비밀번호 저장
* */
fun savePassword(value: String) {
var editor = sharedPreferences.edit()
editor.putString("encryptedPassword", value)
editor.apply()
}
/**
* 비밀번호 가져오기
* */
fun password(): String {
var password = sharedPreferences.getString("encryptedPassword", "")
return password
}
[주의사항]
안드로이드 6.0 마시멜로부터 가능하기 때문에 minSdkVersion 23 부터 적용할 수 있다. 관리하고 있는 앱이 minSdkVersion 23 미만이라면 EncryptedSharedPreferences를 사용하기 위해서는 minSdkVersion 업데이트를 고려 해야한다.
Manifest merger failed : uses-sdk:minSdkVersion 21 cannot be smaller than version 23 declared in library [androidx.security:security-crypto:1.0.0-alpha02] .... as the library might be using APIs not available in 21
Suggestion: use a compatible library with a minSdk of at most 21,
or increase this project's minSdk version to at least 23,
or use tools:overrideLibrary="androidx.security" to force usage (may lead to runtime failures)
'프로그래밍 > android' 카테고리의 다른 글
android studio xml tab spacing (0) | 2020.11.17 |
---|---|
[android] 안드로이드 웹뷰 로컬 스토리지 사용하기 옵션 (webview local storage) (0) | 2020.11.10 |
[kotlin] 코틀린 null 처리 (.let) (0) | 2020.10.16 |
[android] 안드로이드 AES256 암호화 복호화 (feat. java) (0) | 2020.08.11 |
[kotlin] 안드로이드 코틀린 두 날짜 차이 계산 (4) | 2020.08.08 |