最稳妥的方式是用终端hdiutil命令创建UDBZ格式映像;磁盘工具在含符号链接、扩展属性、中文路径或ACL时会静默跳过加密,生成未加密的UDRO镜像。

最稳妥的方式是用终端 hdiutil 命令创建 UDBZ 格式映像,图形界面的“磁盘工具”在处理符号链接、扩展属性或中文路径时容易静默失效,导致生成的 .dmg 实际未加密。
为什么磁盘工具不适合做只读加密镜像
当你在“磁盘工具”里选“从文件夹制作映像”并勾选加密,系统会在遇到以下情况时自动跳过加密步骤,降级为未加密的 UDRO 格式:
- 源文件夹内含符号链接(比如指向 iCloud 的快捷方式)
- 文件带有扩展属性(xattr),常见于文本编辑器、预览或同步工具写入的元数据
- 路径名含中文、空格或特殊字符(如括号、顿号)
- 存在 ACL 访问控制规则(例如通过
chmod +a设置)
这类 DMG 双击就能挂载,毫无密码保护——表面看加密了,实际形同虚设。
用终端创建真正加密的只读镜像(推荐)
执行这条命令,确保 AES-256 加密生效且不可写:
hdiutil create -srcfolder "/path/to/your/folder" -format UDBZ -encryption AES-256 -agentpass -o "/path/to/output.dmg"
-
-srcfolder:指定待打包的文件夹,路径建议全英文、无空格(可先重命名) -
-format UDBZ:关键!这是压缩 + AES-256 加密 + 只读三合一格式;别用 UDZO 或 UDIF -
-agentpass:弹出图形密码框,避免密码留在终端历史或进程列表中 - 回车后会两次提示输入密码,输完即开始封装
生成后验证是否真加密:hdiutil imageinfo yourfile.dmg | grep encryption
输出必须是 encryption: AES-256。若显示 none,说明加密没生效,需检查源文件夹内容。
挂载与兼容性注意
UDBZ 映像在 macOS 10.15 及更新版本可直接双击挂载,输入密码即可读取。但若在旧系统(如 10.13)上提示 “no mountable file systems”,说明不兼容,可临时转成 UDRW 格式过渡:
hdiutil convert -format UDRW -o "/tmp/temp.dmg" "yourfile.dmg"
然后用 hdiutil attach -prompt "/tmp/temp.dmg" 挂载。注意:UDRW 不压缩也不加密,仅作临时兼容用,用完删掉。
如果坚持用图形界面(风险自担)
仅适用于源文件夹极干净的情况(纯英文名、无符号链接、无扩展属性、无 ACL):
- 打开“磁盘工具” → 文件 → 新建映像 → 从文件夹制作映像…
- 选中文件夹后,在配置页中:格式选“只读”,加密必须选“256位 AES 加密”
- 务必取消勾选“记住此密码在钥匙串中”
- 生成后仍要运行
hdiutil imageinfo xxx.dmg | grep encryption确认结果
只要输出不是 AES-256,就说明这次加密失败,建议退回终端方式重做。


















