如何通过 OpenSSL 在 PHP 中使用 AES-256 算法实现数据的对称加密?

2026-04-27 20:350阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计968个文字,预计阅读时间需要4分钟。

如何通过 OpenSSL 在 PHP 中使用 AES-256 算法实现数据的对称加密?

直接使用`openssl_encrypt`和`openssl_decrypt`可以实现加密和解密,但密钥长度、IV生成方式和模式选择这三者如果不匹配,解密将失败。

为什么 AES-256-CBC 解密总返回 false

常见错误是密钥长度不对或 IV 长度错配。AES-256 要求密钥正好 32 字节,不是字符串长度 32,而是二进制长度 32 —— 如果你传入 'my-secret-key-256' 这种 ASCII 字符串,它只有 17 字节,openssl_encrypt 不报错但会静默截断或填充,导致解密失败。

  • strlen($key) === 32 检查密钥字节长度,不是 mb_strlen
  • CBC 模式下 IV 必须是 16 字节,可通过 openssl_cipher_iv_length('aes-256-cbc') 动态获取,别硬写 16
  • 加密和解密必须用完全相同的 $method 字符串,大小写敏感:'AES-256-CBC''aes-256-cbc' 在某些 OpenSSL 版本中不等价

如何安全生成和复用密钥与 IV

密钥绝不能写死,IV 绝不能复用。每次加密都该新生成 IV,并和密文一起存储/传输;密钥则应从环境变量或 KMS 获取,而不是拼接字符串或哈希固定值。

阅读全文
标签:PHPSSL

本文共计968个文字,预计阅读时间需要4分钟。

如何通过 OpenSSL 在 PHP 中使用 AES-256 算法实现数据的对称加密?

直接使用`openssl_encrypt`和`openssl_decrypt`可以实现加密和解密,但密钥长度、IV生成方式和模式选择这三者如果不匹配,解密将失败。

为什么 AES-256-CBC 解密总返回 false

常见错误是密钥长度不对或 IV 长度错配。AES-256 要求密钥正好 32 字节,不是字符串长度 32,而是二进制长度 32 —— 如果你传入 'my-secret-key-256' 这种 ASCII 字符串,它只有 17 字节,openssl_encrypt 不报错但会静默截断或填充,导致解密失败。

  • strlen($key) === 32 检查密钥字节长度,不是 mb_strlen
  • CBC 模式下 IV 必须是 16 字节,可通过 openssl_cipher_iv_length('aes-256-cbc') 动态获取,别硬写 16
  • 加密和解密必须用完全相同的 $method 字符串,大小写敏感:'AES-256-CBC''aes-256-cbc' 在某些 OpenSSL 版本中不等价

如何安全生成和复用密钥与 IV

密钥绝不能写死,IV 绝不能复用。每次加密都该新生成 IV,并和密文一起存储/传输;密钥则应从环境变量或 KMS 获取,而不是拼接字符串或哈希固定值。

阅读全文
标签:PHPSSL