作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试编写一个 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,我应该能够正常工作。
最佳答案
我将把您的两个 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”。根据您要生成的参数,将它们放入“从”和“到”参数中。
我将其发布在评论中,但为了便于引用,我将其包含在此处。为了获得长字符串,调用 mb_convert_encoding()
并将“UCS-2LE”作为第二个参数。示例:
$password = '"Password1"';
echo base64_encode(mb_convert_encoding($password, 'UCS-2LE'));
产生:
IgBQAGEAcwBzAHcAbwByAGQAMQAiAA==
关于php - base64_encode() 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677913/
我是一名优秀的程序员,十分优秀!