我在应用程序中工作,我需要保持我的DB安全,因此我使用领域DB与SecureRandom类,这在java中可用。
这是我的问题-我已经通过使用这两个样本,我能够加密数据库。但当我重新启动应用程序时,它崩溃了,下面是代码和日志
异常结果:我想解密数据库并重新启动应用程序。
可以在这里一些建议如何解密的领域数据库。
Realm.init(this);
byte[] key = new byte[64];
new SecureRandom().nextBytes(key);
Log.v("Test", Util.bytesToHex(key));
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
.name(mTableName)
.encryptionKey(key)
.schemaVersion(1)
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(realmConfiguration);解密方法:
private final static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for ( int j = 0; j < bytes.length; j++ ) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}崩溃日志:
Caused by: io.realm.exceptions.RealmFileException: Unable to open a realm at path '/data/data/com.trident.dpperformance/files/Trident_DB': Realm file decryption failed Path:. (Realm file decryption failed Path: /data/data/com.trident.dpperformance/files/Trident_DB) (/data/data/com.trident.dpperformance/files/Trident_DB) in /Users/Nabil/Dev/realm/master2/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 101 Kind: ACCESS_ERROR.
at io.realm.internal.OsSharedRealm.nativeGetSharedRealm(Native Method)
at io.realm.internal.OsSharedRealm.<init>(OsSharedRealm.java:171)
at io.realm.internal.OsSharedRealm.getInstance(OsSharedRealm.java:241)
at io.realm.internal.OsSharedRealm.getInstance(OsSharedRealm.java:231)
at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:318)
at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:284)
at io.realm.Realm.getDefaultInstance(Realm.java:407)
at com.trident.dbperformance.RealmController.<init>(RealmController.java:17)
at com.trident.dbperformance.RealmController.with(RealmController.java:22)
at com.trident.dbperformance.MainActivity.onCreate(MainActivity.java:26)
at android.app.Activity.performCreate(Activity.java:7224)发布于 2020-07-13 16:38:29
不要使用new SecureRandom().nextBytes(key);这种方法来生成密钥。每次打开应用程序时,都会生成一个新的随机密钥。然而,当涉及到Realm时,您每次都必须使用相同的密钥进行加密和解密。
有关如何按照领域文档加密和正确存储加密密钥的更多信息:https://docs.mongodb.com/realm/sdk/android/advanced-guides/encryption/
https://stackoverflow.com/questions/56835898
复制相似问题