-
[안드로이드 kotlin] Protected Shared Preferences 와 Shared Preferences 가 다른건가?안드로이드(kotlin)/기능 관련 2023. 4. 24. 21:05
Protected Shared Preferences 와 Shared Preferences 가 다른건가? 다르다면 어떻게 다른거지?
보안성이 좀 더 좋은거는 아는데...
그냥 막연하게 다르다고만 알고 사용했었는데 뭐가 다른지 궁금해졌습니다.
먼저, SharedPreferences는 간단한 키-값 쌍을 저장하기 위한 안드로이드의 내부 저장소입니다.
SharedPreferences는 앱의 모든 컴포넌트에서 접근 가능하며, 앱을 삭제하거나 데이터를 삭제하기 전까지 지속적으로 유지됩니다.
하지만, SharedPreferences는 파일 시스템에 평문으로 저장되기 때문에, 앱의 데이터 보안에 취약할 수 있습니다.
Protected Shared Preferences는 SharedPreferences의 확장 버전으로, 암호화된 형식으로 데이터를 저장하는 안드로이드의 내부 저장소입니다.Protected Shared Preferences는 앱에서 생성된 데이터만 암호화되며, 다른 앱이나 사용자가 직접 접근할 수 없습니다.
Protected Shared Preferences는 Android 9(Pie) 버전부터 도입되었으며, 이전 버전의 안드로이드에서는 KeyStore와 같은 외부 저장소를 사용하여 데이터를 암호화하였습니다.
Protected Shared Preferences는 SharedPreferences와 비슷한 인터페이스를 가지고 있기 때문에, SharedPreferences와 같은 방식으로 사용할 수 있습니다.하지만, Protected Shared Preferences는 데이터를 안전하게 저장할 수 있기 때문에, 중요한 데이터를 저장할 때 사용하는 것이 좋습니다.
아래에 간단하게 확인해볼 수 있는 예제입니다.
object MySecurePreferences { private const val TAG = "MySecurePreferences" private const val PREFS_NAME = "MySecurePreferences" private var preferences: SharedPreferences? = null fun getPreferences(context: Context): SharedPreferences? { if (preferences == null) { try { // Create a Master Key for encryption/decryption val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC) // Initialize EncryptedSharedPreferences preferences = EncryptedSharedPreferences.create( PREFS_NAME, masterKeyAlias, context, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM ) } catch (e: GeneralSecurityException) { Log.e(TAG, "Failed to create encrypted preferences", e) } catch (e: IOException) { Log.e(TAG, "Failed to create encrypted preferences", e) } } return preferences } }
<선언한 코드>
EncryptSharedPreferences 클래스를 사용해서 Protected Shared Preferences 를 초기화 하rh MasterKeys 클래스를 사용하여 Master Key 를 생성합니다.
val preferences = MySecurePreferences.getPreferences(context) val editor = preferences?.edit() editor?.putString("key", "value") editor?.apply() val value = preferences?.getString("key", null)
<사용한 코드>
이런 형태로 진행하면 Protected Shared Preferences 를 사용할 수 있습니다.
'안드로이드(kotlin) > 기능 관련' 카테고리의 다른 글
[안드로이드 kotlin] NFC 기본 내용 정리 (0) 2023.07.12 [안드로이드 kotlin] webview 버튼 선택시 외부 브라우저가 실행되지 않도록 하기 (0) 2022.09.23 [안드로이드 kotlin] camera, gallery URI 확인 및 주의할 점 (0) 2022.04.12 [안드로이드 kotlin] retrofit 으로 내용이 비어있는 jsonoObject 요청 보내기 (0) 2021.12.12 [안드로이드 kotlin] 소프트 키보드 내리기(activity, custom dialog) (0) 2021.05.04