gpt4 book ai didi

php - 在 PHP 中检测 base64 编码?

转载 作者:IT王子 更新时间:2023-10-29 01:13:05 25 4
gpt4 key购买 nike

有什么方法可以检测一个字符串是否已经在 PHP 中进行了 base64_encoded()?

我们正在将一些存储从纯文本转换为 base64,其中一部分存储在需要更新的 cookie 中。如果文本尚未编码,我想重置他们的 cookie,否则不要管它。

最佳答案

抱歉,对已回答的问题的回复较晚,但我认为 base64_decode($x,true) 不足以解决此问题。事实上,可能没有针对任何给定输入的非常好的解决方案。例如,我可以将大量错误值放入 $x 中,而不会得到错误的返回值。

var_dump(base64_decode('wtf mate',true));
string(5) "���j�"

var_dump(base64_decode('This is definitely not base64 encoded',true));
string(24) "N���^~)��r��[jǺ��ܡם"

我认为除了严格的返回值检查之外,您还需要进行解码后验证。最可靠的方法是您可以解码然后检查一组已知的可能值。

准确度低于 100% 的更通用的解决方案(较长字符串更接近,短字符串不准确)是,如果您检查输出以查看是否有许多超出 utf-8 的正常范围(或您使用的任何编码) ) 字符。

看这个例子:

<?php
$english = array();
foreach (str_split('az019AZ~~~!@#$%^*()_+|}?><": Iñtërnâtiônàlizætiøn') as $char) {
echo ord($char) . "\n";
$english[] = ord($char);
}
echo "Max value english = " . max($english) . "\n";

$nonsense = array();
echo "\n\nbase64:\n";
foreach (str_split(base64_decode('Not base64 encoded',true)) as $char) {
echo ord($char) . "\n";
$nonsense[] = ord($char);
}

echo "Max nonsense = " . max($nonsense) . "\n";

?>

结果:

Max value english = 195
Max nonsense = 233

所以你可以这样做:

if ( $maxDecodedValue > 200 ) {} //decoded string is Garbage - original string not base64 encoded

else {} //decoded string is useful - it was base64 encoded

您可能应该使用解码值的 mean() 而不是 max(),我在这个示例中只使用了 max(),因为遗憾的是 PHP 中没有内置的 mean()。您针对什么阈值(例如 200)使用什么度量(平均值、最大值等)取决于您估计的使用情况。

总之,唯一的制胜法宝就是不玩。我会尽量避免首先识别 base64。

关于php - 在 PHP 中检测 base64 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556345/

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