Kaitou kid code

Khi siêu đạo chích đi code dạo :)

encrypted share

Shared preferencesthật tuyệt vời khi bạn muốn lưu liên tục các mục nhập giá trị khóa nhỏ trên Android. Chúng siêu dễ dàng để khởi tạo và sử dụng.

Tất nhiên, tất cả mọi thứ được lưu dưới dạng văn bản đơn giản. Một diễn viên độc hại có quyền truy cập vào thiết bị có thể dễ dàng sẵn sàng những sở thích đó.

Vì vậy, nếu bạn muốn lưu một cái gì đó bí mật hơn một chút (vì mọi thứ được lưu trữ trên thiết bị dù sao cũng dễ bị tổn thương nếu ai đó có quyền truy cập vật lý vào thiết bị), tùy chọn chia sẻ đơn giản không phải là giải pháp.

Đây là nơi sở thích được chia sẻ được mã hóa trong tay. Đây là một thư viện Jetpack tương đối mới cung cấp quyền truy cập dễ sử dụng vào các chức năng liên quan đến mã hóa cho các nhà phát triển Android.

Tin xấu là, như mong đợi, sử dụng các bảng chia sẻ được mã hóa có chi phí hoạt động do mã hóa / giải mã.

Tin tốt là thư viện sử dụng giao diện dễ sử dụng giống như đối tác không được mã hóa của họ. Điều này cho phép tích hợp phiên bản được mã hóa dễ dàng với ứng dụng hiện tại của bạn mà không có nhiều thay đổi.

Chẳng hạn, bạn có thể tạo một vị trí trung tâm để lưu / đọc các tùy chọn được chia sẻ và mã hóa được xử lý bởi một boolean đã qua:

private const val PREFS_NAME = “prefs_name”
private const val ENCRYPTED_PREFS_NAME = “encrypted_$PREFS_NAME”

private val sharedPrefs by lazy {
applicationContext.getSharedPreferences(
PREFS_NAME, Context.MODE_PRIVATE)
}

private val encryptedSharedPrefs by lazy {
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
EncryptedSharedPreferences.create(
ENCRYPTED_PREFS_NAME,
masterKeyAlias,
applicationContext,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
}

fun put(key: String, value: String, encrypted: Boolean = false) {
val prefs = if (encrypted) sharedPrefs else encryptedSharedPrefs
with(prefs.edit()) {
putString(key, value)
commit()
}
}

fun get(key: String, default: String? = null, encrypted: Boolean = false): String? {
val prefs = if (encrypted) sharedPrefs else encryptedSharedPrefs
return prefs.getString(key, default)
}

Khóa chính được sử dụng để mã hóa các tùy chọn chia sẻ này được lưu trong hệ thống Kho khóa của Android. Điều này khiến cho khóa chính khó bị trích xuất khỏi thiết bị ngay cả khi thiết bị rơi vào tay trái phép.

Lưu ý rằng SDK tối thiểu để sử dụng thư viện này là 23+ và tại thời điểm viết phiên bản mới nhất là 1.0.0-alpha2 (hy vọng sẽ sớm hết alpha).
Thêm phần này vào build.gradle của bạn để cài đặt:

dependencies {
implementation “androidx.security:security-crypto:1.0.0-alpha02”
}

Gần đây tôi không biết về thư viện này và tôi nghi ngờ nhiều người khác cũng không biết về nó. Hãy tận hưởng và hãy làm cho ứng dụng của chúng tôi an toàn hơn một chút 🙂

Ngoài ra các bạn cũng có thể sử dụng thư viện bên dưới đây để mã hóa SharedPreference của mình.

dependencies {
implementation ‘com.scottyab:secure-preferences-lib:0.1.7’
}

Cách dùng ở đây các bạn nhé:
https://github.com/scottyab/secure-preferences
Hy vọng giúp ích cho các bạn bảo vệ dữ liệu tốt hơn.

Bình luận qua Facebook

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *