如何将未加密的领域迁移到加密领域

cin*_*o88 2 android realm

我上一个发布的应用程序使用的是未加密的领域。现在,我想更新以使用加密领域。

但我不知道如何迁移未加密的数据。

请帮帮我~ :(

cin*_*o88 6

本人回答。我制作了 util 类来帮助迁移。(未加密的文件 -> 加密的文件)

public class RealmEncryptionHelper {
    private static final String ENCRYPTION_FILE_PREFIX = "encrypted_";

    public static Realm createEncryptedRealm(Context context, RealmConfiguration.Builder builder) {
        RealmConfiguration unencryptedConfig = builder.build();

        RealmConfiguration encryptedConfig = builder.name(ENCRYPTION_FILE_PREFIX + unencryptedConfig.getRealmFileName())
                .encryptionKey(AppSharedPreferences.getInstance(context).getRealmEncryptionKey())
                .build();

        migrationIfNeeded(unencryptedConfig, encryptedConfig);

        return Realm.getInstance(encryptedConfig);
    }

    private static void migrationIfNeeded(RealmConfiguration unencryptedConfig, RealmConfiguration encryptedConfig) {
        File unencryptedFile = new File(unencryptedConfig.getPath());
        File encryptedFile = new File(encryptedConfig.getPath());

        Realm unencryptedRealm = null;
        if (!encryptedFile.exists() && unencryptedFile.exists()) {
            try {
                unencryptedRealm = Realm.getInstance(unencryptedConfig);
                unencryptedRealm.writeEncryptedCopyTo(encryptedFile, encryptedConfig.getEncryptionKey());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (unencryptedRealm != null) {
                    unencryptedRealm.close();
                    unencryptedFile.delete();
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)