gpt4 book ai didi

php - base64_encode() 的差异

转载 作者:可可西里 更新时间:2023-11-01 11:33:46 26 4
gpt4 key购买 nike

我正在尝试编写一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com