主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

保护可部署存档中的代码和数据

您可以使用打包选项来保护已部署的应用程序代码,这些选项允许您隐藏文件和文件夹名称、存储机密信息以及加密可部署的存档。单独或一起使用这些选项可以提高应用程序的安全性。

有关保护 MATLAB® 源代码的一般信息,请参阅保护源代码的安全考虑事项

保护用户数据并混淆处理文件结构

MATLAB Compiler™ 创建可部署存档时,MATLAB 代码文件(纯文本 MATLAB 文件或 P 代码文件)使用标准 AES-256 算法加密。默认情况下,文件的名称和目录结构不会被隐藏,其他文件类型(如 MAT、FIG、MEX 等)也不会被加密。

对于所有部署目标,您可以隐藏文件名称和目录结构,还可以加密其他文件类型(例如 MAT、FIG、MEX 等)。加密文件在磁盘上仍保持加密状态,但在运行时会在内存中解密为其原始形式。

根据您的打包方法,您可以使用以下一个或多个选项保护您的 MATLAB 代码和数据。

  • 使用 mcc -s 选项混淆处理可部署存档(CTF 文件)中的文件夹结构和文件名,并将用户代码和数据放入存档内的用户包中。在运行时,系统会从用户包直接解密和加载 MATLAB 代码和数据,而不是将其提取到文件系统。 (自 R2021b 起)

  • 使用 mcc -j 选项在打包之前自动将所有 .m 文件转换为 P 文件。 (自 R2022b 起)

  • 使用 ObfuscateArchive 函数中的 compiler.build 选项来混淆处理可部署存档中的文件夹结构和文件名,并在打包之前将所有 .m 文件转换为 P 文件。此选项等效于使用同时指定 -s-jmcc (自 R2023a 起)

  • 使用编译器 App 的其他运行时设置区域中的 -s (自 R2021b 起)-j (自 R2022b 起) 选项。

有关选择打包方法的信息,请参阅选择部署选项

使用密钥包含敏感信息的代码

对于独立应用程序和 Web App,如果您要部署的 MATLAB 代码处理敏感数据字符串(例如密码),则可以将其作为机密存储在 MATLAB 保管库中,从而避免将它们放入 MATLAB 代码中。然后,您可以将可部署存档与机密一起打包,这些机密在运行时解密。

要将机密包含在可部署存档中,请在使用 setSecret 打包之前将每个机密存储在 MATLAB 保管库中。使用 getSecret 检索已部署的 MATLAB 代码中的机密。然后,根据您的打包方法,使用以下选项之一在机密清单 JSON 文件中指定机密名称。

  • compiler.build 函数中使用 SecretsManifest 选项。 (自 R2024b 起)

  • 使用 mcc -J 选项。 (自 R2024a 起)

  • 使用编译器 App 的其他运行时设置区域中的 -J 选项。 (自 R2024a 起)

有关部署使用机密 的代码的详细信息,请参阅处理已部署 App 中的敏感信息

有关创建使用机密的独立应用程序的示例,请参阅访问独立应用程序中的敏感信息

运行时需要解密密钥

为了控制运行时的应用程序访问,您可以指定 AES 加密密钥和 MEX 文件加载程序接口来检索解密密钥。

根据您的打包方法,在打包过程中使用以下等效选项之一指定密钥和加载程序文件。

  • compiler.build 函数中使用 ExternalEncryptionKey 选项。 (自 R2024b 起)

  • 使用 mcc -k 选项。 (自 R2022b 起)

  • 使用编译器 App 的其他运行时设置区域中的 -k 选项。 (自 R2022b 起)

有关更多详细信息,请参阅 mcc -k 条目。

不使用 MEX 加载程序打包 C++ 共享库

对于 C++ 共享库,除了在编译时指定密钥和 MEX 加载程序之外,您还可以仅指定加密密钥 (自 R2023b 起)。然后,您在 C++ 应用程序中运行时将十六进制编码的 64 字节解密密钥作为使用 MATLAB 数据 API 的 initMATLABLibrary 函数或使用 mwArray API 的 <library>InitializeWithKey 函数的参量提供。对于此工作流,语法是:

mcc mfilename1 -W 'cpplib:library_name' -k '<keyfile>'

另请参阅

| | |

主题