기존 응용 프로그램에서 E ncryptedSharedPreferences로 이동하는 방법
10552 단어 Android
우선: EncryptedSharedPreferences란 무엇입니까?
Android Developers 데이터를 보다 안전하게 처리
SharedPreferences 클래스 패키지를 두 가지 방법으로 키와 값을 자동으로 암호화합니다.
- 암호화 상태에서도 키를 검색할 수 있도록 확정적 암호화 알고리즘을 사용하여 키를 암호화합니다.
- 값은 AES-256GCM을 사용하여 암호화됩니다.이것은 비결정적이다.
2021년 4월 Stable 버전 ver1.0.0 Jetpack이 발표된 라이브러리입니다.
이 프로그램 라이브러리를 사용하면 암호화된 Shared Preferences의 데이터를 복잡한 코드 없이 읽고 쓸 수 있습니다.
발표된 프로그램에서 이 프로그램 라이브러리를 사용하려면 암호화되고 저장된 데이터를 복호화하고 다시 암호화하여 저장해야 합니다.
이 글에서 그 구체적인 처리에 대해 설명할 것이다.
1. 도입
Android Developers 페이지 참고로 프로그램 라이브러리의 의존 관계를 추가합니다.
app/build.gradle
dependencies {
implementation "androidx.security:security-crypto:1.0.0"
}
2. 초기화 처리SharedPreferences 작업을 하는 클래스에서 암호화된 edit를 가져옵니다.
프로그램이 시작될 때와 같은 경우, encryptedPreferencess Name
context.packageName
을 그대로 사용하면 문제가 없지만, 같은 이름의 파일에 데이터를 저장했다면, 적절한 suffix를 추가해야 합니다. private val encryptedPreferencesName = context.packageName + "_encrypted_preferences"
private val prefs: SharedPreferences = EncryptedSharedPreferences.create(
encryptedPreferencesName,
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
private val editor = prefs.edit()
또한 라이브러리 가져오기 전에 Shared Preferences에 접근하는 데 사용된 기존 편집도 가져옵니다. private val unEncryptedPrefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
private val unEncryptedEditor = unEncryptedPrefs.edit()
3. 데이터 이관 처리데이터의 이관 처리는 응용 프로그램이 시작될 때 해야 하기 때문에 Application 클래스의 onCreate () 의 시간에 다음과 같은 처리를 실행합니다.
요점마다 해설을 하다.
fun initialize(keys: List<Pair<String, Boolean>>) { // ポイント①:移管対象の項目を指定する
val unEncryptedKeys: List<String> = unEncryptedPrefs.all.keys.map { it.toString() }
keys.forEach {
val key = it.first
val isEncrypted = it.second
unEncryptedKeys.find { it == key }?.let {
unEncryptedPrefs.all.entries.find { it.key == key }?.let { entry ->
if (isEncrypted) {
putString(key, getStringWithDecryption(key))
} else {
when (val value = entry.value) {
is String -> putString(key, value)
is Int -> putInt(key, value)
is Long -> putLong(key, value)
is Boolean -> putBoolean(key, value)
}
}
unEncryptedEditor.remove(key).apply() // ポイント②:移管した項目を削除する
}
}
}
}
요점 ①: 이관 객체의 항목 지정※ 이 처리가 꼭 필요한 것은 아니다
자신이 담당하는 프로그램에 사용되는 SDK는 기본 Shared Preferences를 사용하여 데이터를 읽고 씁니다.
따라서 여기에는 이관 대상으로 "(SDK가 아님) 어플리케이션에서 관리하는 프로젝트"를 명시적으로 지정해야 합니다.
SDK가 관리하는 프로젝트까지 E-ncryptedSharedPreferences로 관리하면 SDK 측에서 디코딩할 수 없는 오류가 발생합니다.
이 경우 이관 객체를 목록화하는 것이 좋습니다.
private val keys = listOf(
Pair("testKey1", false), // キーと暗号化済みの項目か?をPairでまとめる
Pair("testKey2", true)
)
②: 이관 항목 삭제기존 Shared Preferences에서 E ncrypted Shared Preferences로 이전하는 프로젝트에 대해 기존 Shared Preferences에서 데이터를 삭제합니다.
이렇게 되면 다음 프로그램이 시작될 때 이 이관 처리는 실행되지 않을 것이다.
총결산
EncryptedSharedPreferences를 사용하면 Android KeyStore Manager가 아닌 암호화 키와 값을 응용할 수 있습니다.
지금부터 시작하는 프로그램은 처음부터 이 방식으로 읽기와 쓰기를 하면 되지만 기존 프로그램은 구 버전과 일치성을 유지해야 하기 때문에 본 보도에 기재된 것처럼 이관 처리를 해야 한다.
나는 실제 업무에서 이런 상황이 절반을 차지하고 있다고 생각한다. 누군가를 도울 수 있다면 좋겠다
참고 문장
Reference
이 문제에 관하여(기존 응용 프로그램에서 E ncryptedSharedPreferences로 이동하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoiko/items/c4355cb15ce77770a24c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)