我正在将一些遗留代码从PHP 5.1 RHEL4安装迁移到Ubuntu上的PHP 5.3。那里有一个使用mcyrpt(cast-128 / ctr)的加密例程,它有一个硬编码的密钥。该函数在新服务器上工作(即我可以加密然后解密),但是拒绝解密以前在旧服务器上加密的数据
经过大量测试后,我很确定这归结为使用的硬编码密钥,其中包含#(octothorp)和£(英镑)符号;我认为旧服务器对新服务器的处理方式不同,所以当我尝试解密旧数据时,我的密钥是不同的。
所以 - 我在旧服务器上运行了一些代码,为我提供了密钥中每个字符的ord值,返回35(#)& 163(£)分别。使用这些代码我尝试使用chr(35)& chr(163)在新服务器上,但无论我尝试什么,我都无法让chr(35)输出#,只需£。即使回声“###”也会返回“£”。
为了它的价值 - 我从命令行运行,尝试过default_charset =“utf-8”和iso-8859-1,尝试使用mb_internal_encoding设置字符集并尝试更改文件本身的编码以匹配在旧服务器上进行编码。
更新:我在解密之前检查过IV的字节码,加密数据和密钥,两者在起源和新服务器上都是相同的。
我现在可以去哪里?