领域数据库解密失败 [英] Realm database decryption failed
问题描述
问题:当我尝试在Realm Browser
(Windows)中打开加密的领域文件时,它会显示以下消息.
Question : When I try to open encrypted realm file in Realm Browser
(windows) and it gives me following message.
这不是Realm文件,还是已加密.
Either this is not a Realm file or it's encrypted.
输入:128个字符的十六进制编码加密密钥
重要- 我要先关闭领域,然后再保存到磁盘上.
Important - I am closing my realm before saving on disk.
代码
RealmConfiguration config = new RealmConfiguration.Builder()
.name("w5uyqFyEDEK_OCWyl4123aa77")
.schemaVersion(2)
.encryptionKey(myClassObject.getRealmKey())
.deleteRealmIfMigrationNeeded()
.build();
方法
public byte[] getRealmKey() {
byte[] key;
String savedKey = getStringFromPrefs(KEY);
if (savedKey.isEmpty()) {
key = generateKey();
String keyString = encodeToString(key);
saveStringToPrefs(keyString);
} else {
key = decodeFromString(savedKey);
}
return key;
}
private void saveStringToPrefs(String aKeyString) {
pref.edit().putString(KEY, aKeyString).apply();
}
private String encodeToString(byte[] aKey) {
AppLogger.d("Encoding Key: %s", Arrays.toString(aKey));
return Base64.encodeToString(aKey, Base64.DEFAULT);
}
private byte[] decodeFromString(String aSavedKey) {
byte[] decoded = Base64.decode(aSavedKey, Base64.DEFAULT);
AppLogger.d("Decoded Key: ", Arrays.toString(decoded));
return decoded;
}
private byte[] generateKey() {
byte[] key = new byte[64];
new SecureRandom().nextBytes(key);
return key;
}
我尝试使用存储在preference
和byte[] decodedKey
中的key
打开加密的领域文件,但是仍然无法打开领域文件.
I have tried to open encrypted realm file using key
stored in preference
and byte[] decodedKey
but still I am not able to open realm file.
我在这里想念东西吗?
推荐答案
您需要对加密密钥进行十六进制编码,而不是对Base64进行编码.
You need to Hex encode your encryption key, not Base64 encode it.
您可以在此处查看操作方法: https://github.com/realm/realm-java/pull/5571
You can see how to do it here: https://github.com/realm/realm-java/pull/5571
这篇关于领域数据库解密失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!