PHP加密/解密default_charset问题

时间:2011-05-20 16:22:21

标签: php string encryption unicode ascii

我需要在一台计算机上加密文件,然后使用PHP打开另一台计算机而不使用外部库。代码应该适用于PHP4和PHP5。

加密函数生成字符串的str_split,并使用密码的str_split对每个字符(ord)进行编码。然后它使chr和我得到二进制数据。这个二进制数据使用base64_encode编码,我得到ascii字符串。

我将此文件传输到另一台知道密码的计算机。 我制作base64_decode并进行解密。

问题有时会出现,因为第一台计算机具有ASCII default_charset,第二台计算机具有UTF-8。 这就是为什么nth-char $ temproraryBinaryString [$ n-1]在这些计算机上可能有不同的值。

如果我无法在任何一台计算机上控制php.ini,我可以要求PHP将所有字符串视为ASCII吗?

2 个答案:

答案 0 :(得分:1)

请看一下这篇文章的讨论,因为它讨论了使用PHP mcrypt的双向加密,这是你应该使用的。 Two-way encryption: I need to store passwords that can be retrieved

答案 1 :(得分:0)

我错误地将其标记为重复,但事实并非如此,您所说的是编码而非加密,只需尝试:

$ascii = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $string);

这应该为您提供一个干净的ASCII字符串,以便与str_split()等一起使用。