【问题标题】:PHP encrypt/decrypt default_charset problemPHP加密/解密default_charset问题
【发布时间】:2011-08-29 19:31:10
【问题描述】:

我需要在一台计算机上加密文件,然后使用 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 吗?

【问题讨论】:

标签: php string encryption unicode ascii


【解决方案1】:

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

【讨论】:

  • + 用于 mcrypt,请注意两台服务器需要相同的 php 版本。懒得自己查了,但我认为早期版本和 5.3 之间的实现或某些东西发生了变化。
【解决方案2】:

我错误地标记为重复但不是,你说的是编码不是加密,试试看:

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

这应该会给你一个干净的 ASCII 字符串来处理str_split() 等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2015-06-22
    • 1970-01-01
    • 2012-04-04
    • 2020-08-04
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多