前人挖坑,后人遭殃。 1、源代码里面用的 `MCRYPT_RIJNDAEL_128` 让人第一感觉,是 `AES-128`,而提供的 `key` 的长度是32 字符,经过 base64_decode 后,为 24 字符,也就是实际对应的应该是 `AES-192`。 2、原文里面还添加了个 IV 的处理,而 ECB 是不支持 IV 的。 看起来是 mcrypt 会根据密钥长度自行选定加密长度算法,也就是自动选择了 `AES-192-ECB`,而 OpenSSL 则始终遵守了传第加密算法,将原本 24 字符长度的 key ,截断成了 `AES-128` 所需要的 16 位,所以不一致,如果你把传递给 mcrypt 的密钥长度裁剪成 16 位,你就会发现他们的加密结果也一样了。 而这里肯定是为了兼容之前的代码,所以这里要改的就是把 `AES-128-ECB` 改为 `AES-192-ECB` 就好了。