2017-03-15 23 views
0

我一直無法找到明確的答案這個問題,所以在這裏;使用Realm作爲安全的文件存儲和文件讀取器

我想用Realm的Android存儲在加密方式文件,那麼可以打開/查看這些文件,而無需真正將它們保存在手機中。這些將是敏感數據文件所以這將是完美的,如果它留在我的應用程序的本地數據庫。

Realm是否適合我的情況,如果不適合,Android還有什麼?

+0

領域是一個持久性存儲,所以無論你放入它**將被存儲在設備上的文件**儘管如此,雖然加密。 – maciekjanusz

+0

@maciekjanusz我不明白這是如何幫助我在我的情況... – Jaythaking

+0

你說你不想保存手機上的文件,我只是指出,領域使用保存在手機上的文件。 – maciekjanusz

回答

1

境界是否適合。您可能需要重新考慮。

如果你只是想加密一個數據庫,這很容易。只要在初始化Realm實例時給它一個加密密鑰。

但是,有一些副作用。

  1. 將大文件保存到Realm會減慢速度。
  2. 數據損壞的危險。
    如果數據庫文件已損壞,則所有數據都將丟失。所以你必須備份。這意味着將文件保存到Realm將導致您的應用程序至少需要將文件系統中的文件直接保存兩次。
  3. 加密密鑰。
    您必須設計一個基於每個設備的加密密鑰,而不僅僅是在您的應用中使用一個相同的密鑰。或者某人只需要將數據庫文件從他人的手機複製到他自己的手機上,並且您的應用程序會爲他解密數據庫。
+0

雖然Realm文件有16MB的限制,但這並不是那麼大......它會大大減緩它的速度嗎?另外,是否可以讀取這些文件,而無需先將它們保存在文件系統存儲器中?我喜歡將所有內容存儲在同一個地方的想法,我寧願避免自己處理外部驅動器中的存儲/加密 – Jaythaking

+0

@Jaythaking不,16 MB僅限於iOS或MacOS上的NSString和NSData。你說你在Android上,對吧?在速度方面,我建議你自己創建一些數據並進行測試。您不需要將其保存到文件系統來讀取它。它在RAM中工作。 –

+0

哦,所以你說在Android上沒有限制?是的,我會用這個方法做一些測試,如果它太慢,我可能會嘗試一個[Android-Simple-Storage] https://android-arsenal.com/details/1/951#get-files – Jaythaking

2

您可以檢查出this previous answer for a more deep explanation關於境界保存圖像(這是iOS上,但基本是相同的:不要做,如果有大量的圖片)

在您的具體使用情況,做了您考慮將文件系統上的加密圖像和Realm中圖像的引用保存在一起?您只需要數據庫中的文件路徑和加密密鑰即可工作。

+0

文檔/圖像不會本地加密,這就是爲什麼它會是完美的只保留在Realm中,因爲它有它自己的加密系統 – Jaythaking

+0

當然,Realm使用256位AES加密算法,這是一種衆所周知的加密算法,當然在Android上有一些庫可以爲你做重疊提升。您可以在將圖像/文檔保存到文件系統之前對其進行加密,然後在Realm中只保留每個文件的路徑和加密密鑰(因爲如果每個文件都有不同的加密密鑰會更好) – Orlando

+0

雖然如此,但找不到任何簡單的解決方案。加密/解密文件evrerytimes似乎有點麻煩...除非有一些魔術庫在那裏,我不知道... – Jaythaking