【问题标题】:Differences in base64_encode()base64_encode() 的区别
【发布时间】:2013-05-21 19:25:05
【问题描述】:

我正在尝试编写一个 PHP 脚本,它接收一个 csv 文件,然后创建一个 LDIFDE 文件,用于将学生导入 AD。

除了密码,我一切正常。

问题似乎出在 PHP 中的 base64_encode() 上。

echo $password = '"Password1"';
echo "<br />";
echo $testPass = base64_decode("IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==");
echo "<br />";
echo base64_encode($password);
echo "<br />";
echo "IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==";
echo "<br />";
echo base64_encode($testPass);

输出是:

"Password1"
"Password1"
IlBhc3N3b3JkMSI=
IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==
IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==

我找不到“Password1”之间的区别。有谁知道我在这里做错了什么?一旦我可以让我的初始和编码的 $password 与编码的 $testPass 匹配,我应该能够让它正常工作。

【问题讨论】:

  • 我刚刚做了一个 var_dump 并得到了以下结果 string '"Password1"' (length=11) string '"�P�s�s�w�o�r�d�1 �"�' (length=22) 我不知道怎么看�是什么。在源代码中,它们以 的形式出现
  • 顺便说一句,试试echo 'chr'.ord($testpass[1]); 并告诉我结果...
  • 字符串为 UCS-2LE / UTF-16 Little Endian。发布了有关如何转换为或从中转换的答案,以正确者为准。

标签: php windows active-directory


【解决方案1】:

我将把你的两个 base64 编码字符串称为“短字符串”和“长字符串”。

长字符串似乎是编码为 UTF16 Little Endian(或 UCS-2LE)的短字符串。查看长字符串解码的 hexdump:

          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF

00000000  22 00 50 00 61 00 73 00 - 73 00 77 00 6F 00 72 00  ".P.a.s.s.w.o.r.
00000010  64 00 31 00 22 00                                  d.1.".

如您所见,每个有效的 ASCII 字节后面都有一个空字节,这就是您的差异的来源。问题是,你想要长字符串还是短字符串?无论哪种方式,请查看 PHP 手册中的 mb_convert_encoding() 以了解您要去的地方。

长字符串的编码是“UCS-2LE”;短字符串的编码类似于“ISO-8859-1”或“cp1252”。根据您要生成的参数,将它们放入“from”和“to”参数中。

编辑 - 必需调用

我在 cmets 中发布了此内容,但为了便于参考,我将其包含在此处。为了获得长字符串,调用mb_convert_encoding() 并使用'UCS-2LE' 作为第二个参数。示例:

$password = '"Password1"';
echo base64_encode(mb_convert_encoding($password, 'UCS-2LE'));

生产:

IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==

【讨论】:

  • 我想要长字符串,来自我找到的文档。让我稍微研究一下,然后回复你。谢谢!
  • 如果你想要长字符串,那么你需要做这样的事情:$some_string = base64_encode(mb_convert_encoding($original_string, 'UCS-2LE')); 编辑:确认
  • 完美。就是这样,mb_convert_encoding() 成功了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多