可恶,被 PHP-Mcrypt 的官方 Example 误导了
作者在为项目寻找轻量级的PHP对称加密方案时,采用了官方mcrypt模块的示例代码,却遇到了加密数据无法正确解密的诡异问题。深入排查后,他发现根源在于官方Example本身的一个关键疏漏:示例没有明确指定字符串与密钥的字符编码。 核心症结在于,PHP内部的字符串处理依赖于字符编码。当加密与解密过程编码不一致(例如,示例中可能混用了UTF-8与ISO-8859-1),就会导致加密后的数据在解密时因编码不匹配而彻底损坏。作者最终发现,显式统一使用UTF-8编码进行加密与解密,问题迎刃而解。 这个案例提醒开发者,在处理加密时,不仅要关注算法本身,更要对数据的“表示形式”(如字符编码)保持高度警惕。官方文档的示例有时为了简洁可能会忽略这类前提条件,在实际生产环境中直接照搬,很可能就会掉进类似的陷阱。