保护可部署存档中的代码和数据
您可以使用打包选项来保护已部署的应用程序代码,这些选项允许您隐藏文件和文件夹名称、存储机密信息以及加密可部署的存档。单独或一起使用这些选项可以提高应用程序的安全性。
有关保护 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
和-j
的mcc
。 (自 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>'
另请参阅
compiler.build.standaloneApplication
| 独立应用程序编译器 | mcc
| getSecret