hdiutil 创建 AES-256 加密只读 DMG 必须用 -format UDBZ -encryption AES-256 -agentpass 组合,禁用 UDIF;GUI 因符号链接或权限问题常静默降级为未加密,验证需用 hdiutil imageinfo 查 encryption 字段。

MacOS 自带的 hdiutil 命令可以创建加密 DMG,但默认不支持 AES-256 密码保护的「只读」映像——必须用 UDIF 格式 + ULFO 编码 + encr=1 参数组合,否则会静默降级为无加密或仅 CRC 校验。
用 hdiutil 创建 AES-256 加密的只读 DMG
关键不是选“加密”复选框(GUI 会强制你用 APFS 或 HFS+ 格式,且无法控制底层编码),而是命令行中显式指定格式与加密开关:
-
hdiutil create -srcfolder "/path/to/folder" -format UDBZ -encryption AES-256 -agentpass -o output.dmg—— 这是推荐组合:UDBZ是压缩 + 加密的只读格式(比UDZO更小,且明确支持 AES) -
-agentpass表示弹出钥匙串密码框,避免明文密码出现在历史记录或进程列表里 - 不要用
-format UDIF:它不启用加密,即使加了-encryption参数也会被忽略 - 源路径不能有中文或空格未转义的符号,否则
hdiutil可能报错hdiutil: create failed - invalid argument
为什么 Disk Utility GUI 创建的 DMG 经常不加密成功
GUI 中勾选“加密”后,如果源文件夹含符号链接、扩展属性(xattr)或 ACL 权限,Disk Utility 会自动回退到 UDRO(只读未加密)格式,并静默跳过加密步骤,最终生成的 DMG 双击可直接打开,毫无密码提示。
- 验证是否真加密:终端运行
hdiutil imageinfo output.dmg | grep encryption,输出应为encryption: AES-256 - 若显示
encryption: none,说明 GUI 流程中途失败,必须改用命令行 - GUI 不支持对已存在文件夹批量处理,而
hdiutil -srcfolder可以直接打包整个目录树
挂载/解密时遇到 “no mountable file systems” 错误
这不是密码错,而是系统不识别该 DMG 的底层编码。常见于用旧版 macOS(UDBZ 映像,在新系统上挂载正常,但反向不兼容。
- 在目标 Mac 上先运行
hdiutil convert -format UDRW -o temp.dmg encrypted.dmg,再用hdiutil attach -prompt temp.dmg尝试——UDRW兼容性最广 - 若仍失败,检查是否启用了 FileVault:FileVault 启用状态下,某些加密参数会被内核策略拦截,需临时关闭再重试
- 错误信息
hdiutil: attach failed - no mountable file systems几乎总是编码/格式问题,而非密码问题
真正麻烦的不是怎么加密码,而是验证它确实生效了——哪怕只漏掉一个 -format 参数,hdiutil 也不会报错,只会给你一个看着像加密、实则裸奔的 DMG。

















