我創建了一個帶有本地存盤的 pdf 檔案的 Flutter 應用程式,我想從逆向工程中保護它,當有人從 google play 下載應用程式并想要查看該應用程式的內容時,他們不能這樣做?注意:該應用程式僅適用于 android 用戶。
uj5u.com熱心網友回復:
我假設您的應用程式必須在某個時候訪問該 PDF,否則它不應該是您的專案檔案夾。
即使 Android 擁有所有安全機制,也無法確保這一點。用戶可以完全訪問他的設備。您可以加密 PDF 并僅將加密內容存盤在手機上,但隨后您必須將密鑰存盤在其他地方。在原生 android 中,有一種叫做Android 密鑰庫系統的東西,您可以使用它來存盤加密密鑰,但您又一次將問題向前推進了一步。
在一天結束時,您只能使提取該 PDF 變得困難,但您將永遠無法阻止人們最終提取它。與普通攻擊者一樣,一旦有人可以物理訪問設備,您幾乎可以假設他可以訪問所有內容。
更新: OP 詢問如何使提取 PDF 變得困難。
我建議在本地使用 AES加密PDF,然后將密鑰存盤在安全的本地存盤中。
第 1 步:加密 PDF:如果您想在運行時加密 PDF,請查看此包,但如果可以,我建議您事先使用其他工具對其進行加密。在任何情況下,您都需要這個包來最終解密 PDF。
代碼可能看起來像這樣(閱讀作業代碼示例的檔案):
// Don't use a hardcoded key. Generate a long random string for the AES key or fetch it (with authentication) from somewhere if it is pre-generated.
String yourKey = 'YOUR ENCRYPTION KEY';
var crypt = AesCrypt(yourKey);
// Encrypts the file srcfile.txt and saves encrypted file under original name
// with '.aes' extention added (srcfile.txt.aes).
crypt.encryptFileSync('srcfile.txt');
解密:
// Decrypt the data from 'mydata.bin.aes' file
Uint8List decryptedData = crypt.decryptDataFromFileSync('mydata.bin.aes');
第 2 步:確保您已洗掉未加密的檔案。
第 3 步:存盤加密密鑰。看看這個包。它將密鑰分別存盤在Android Keystore或 中IOS Keychain(這也是 API 密鑰的最佳實踐)。代碼可能如下所示:
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
// Create storage
final storage = new FlutterSecureStorage();
// Write value using your another key, this one can be hardcoded
await storage.write(key: "yourStorageKey123", value: yourKey );
要獲取解密 PDF 的密鑰:
// Read value
String value = await storage.read(key: "yourStorageKey123");
總而言之,這應該會使提取 PDF 變得非常煩人,但幾乎不可能。順便說一下,這也是有多少應用程式存盤 API 密鑰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390008.html
上一篇:用戶可以從前端讀取firestore中的用戶集合嗎?
下一篇:如果我已經填充了iphdr的所有欄位,那么如何計算tcphdr->doff和iphdr->ihl|tcp資料偏移量和ip頭長度
