【发布时间】:2020-06-08 16:50:39
【问题描述】:
我在访问加密的 Realm DB 时遇到了一些问题。 这是我的流程: - iOS 团队创建加密数据库 - 他们创造了钥匙 - 然后我在 API 响应中收到密钥,以避免在本地存储密钥。
收到密钥后,我使用以下方法将其转换为 SHA-512:
fun String.getSHA512Pass(): String {
return MessageDigest
.getInstance("SHA-512")
.digest(this.toByteArray())
.fold("", { str, it -> str + "%02x".format(it) })}
然后我将它应用到我的 RealmConfiguration:
class AppDatabase {
companion object {
fun init(context: Context) {
Realm.init(context)
val hasKey = "xxxxx-key_from_server-xxxxxx".getSHA512Pass()
try {
val config = RealmConfiguration.Builder()
.assetFile("org.realm")
.encryptionKey(hasKey.toByteArray())
.schemaVersion(1)
.readOnly()
.build()
Realm.setDefaultConfiguration(config)
} catch (exception: Exception) {
Timber.e(exception)
}
}
}}
它会因为这个异常而崩溃:
java.lang.IllegalArgumentException: The provided key must be 64 bytes. Yours was: 128
我尝试实现 Base64、BigInteger(hasKey, 16).toByteArray() 和其他一些方法,但它们没有给我所需的长度。我不知道这是否可行。
任何建议将不胜感激。
【问题讨论】:
标签: android kotlin realm realm-mobile-platform