我正在尝试编写一个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”之间的区别。有谁知道我在这里做错了什么?一旦我可以获得我的初始和编码的$密码以匹配编码的$ testPass,我应该能够正常工作。
答案 0 :(得分:3)
我将把你的两个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”参数中。
我在评论中发布了这个,但为了便于参考,我将其包含在此处。要获取长字符串,请使用'UCS-2LE'作为第二个参数调用mb_convert_encoding()
。例如:
$password = '"Password1"';
echo base64_encode(mb_convert_encoding($password, 'UCS-2LE'));
产地:
IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==