【问题标题】:How to protect stored data locally in flutter如何在flutter中保护本地存储的数据
【发布时间】:2022-01-20 22:34:31
【问题描述】:

我创建了一个带有本地存储 pdf 文件的颤振应用程序,我想保护它免受逆向工程的影响,当有人从 google play 下载该应用程序并想要查看该应用程序的内容时,他们不能这样做吗? 注意:该应用程序仅适用于 android 用户。

【问题讨论】:

    标签: android flutter security


    【解决方案1】:

    我假设您的应用必须在某个时候访问该 PDF,否则它不应该是您的项目文件夹。

    即使 Android 拥有所有安全机制,也无法确保这一点。用户可以完全访问他的设备。您可以加密 PDF 并仅将加密的内容存储在手机上,但随后您必须将密钥存储在其他地方。在原生 android 中,有一个叫做 Android keystore system 的东西,您可以使用它来存储加密密钥,但同样您只是将问题更进一步。

    最终,您只能使提取 PDF 变得困难,但您永远无法阻止人们最终提取它。与普通攻击者一样,一旦有人可以物理访问设备,您几乎可以假设他可以访问所有内容。


    更新: OP 询问如何使 PDF 难以提取。

    我建议在本地使用 AES 加密 PDF,然后将密钥存储在安全的本地存储中。

    第 1 步: 加密 PDF:如果您想在运行时加密 PDF,请查看 package,但如果可以的话,我建议您事先使用其他工具对其进行加密。无论如何,您最终都需要这个包来解密 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 步: 存储加密密钥。看看this 包。它将密钥分别存储在Android KeystoreIOS 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 密钥的应用程序的数量。

    【讨论】:

    • 感谢您提供的所有信息。我的问题是我如何使提取 PDF 变得困难?
    • 我已经更新了我的答案。
    • 非常感谢,我会试试的。
    • 如果您发现对 stackoverflow 有帮助的答案,请记得接受并投上一票,欢迎来到 SO ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2016-02-18
    • 2019-10-18
    • 2020-11-26
    相关资源
    最近更新 更多