M1芯片MacBook中PHP的ext-sodium扩展AES-256-GCM不可用问题咨询
问题根因
你遇到的并非M1硬件不支持AES-256-GCM,而是旧版本libsodium(PHP sodium扩展的底层依赖)对ARM64架构的AES硬件加速检测逻辑不完善导致的:
- Intel x86架构的AES硬件加速依赖AES-NI指令集,
libsodium很早就能正常识别 - Apple M系列芯片的AES硬件加速走ARM Crypto Extensions指令集,
libsodium从1.0.18版本才正式完成该架构的适配,低于该版本的libsodium会误判硬件不支持 - OpenSSL早于
libsodium完成了ARM64架构的AES加速适配,所以你能看到openssl相关命令运行正常
可行解决方案
方案1:升级依赖版本(推荐)
- 先确认当前
libsodium版本:在PHP中执行echo sodium_version_string();,如果输出低于1.0.18则优先升级 - Homebrew环境执行
brew upgrade libsodium,之后重新编译安装PHP的sodium扩展,或者直接升级到PHP 8.0+(PHP 8.0及以上版本默认绑定的libsodium版本已满足要求,且PHP 7.4早已停止官方维护,升级后安全性也有保障)
方案2:Docker自定义镜像适配
官方PHP 7.4的arm64版本镜像自带的libsodium版本过低,你可以基于arm64的Debian/Ubuntu基础镜像自行构建:
- 先添加源安装最新版libsodium
- 再编译PHP及sodium扩展,编译时指定使用系统新版libsodium即可正常识别M1的AES加速能力
方案3:开发环境临时兼容
如果必须使用现有环境且不需要极致性能,可通过补丁修改sodium_crypto_aead_aes256gcm_is_available()的返回值强制为true,libsodium会自动 fallback 到软件实现的AES-256-GCM,功能完全兼容,仅性能低于硬件加速版本,足够满足开发调试需求
注意事项
- 该问题仅出现在ARM64架构+低版本libsodium的组合中,不会影响Intel架构服务器的生产环境运行
- 不要直接基于openssl的AES-256-GCM实现替换sodium的实现,两者的AEAD数据包格式默认不兼容,强行替换会导致跨环境加解密失败
内容的提问来源于stack exchange,提问作者wblommaert
相关产品推荐
相关产品推荐

