如何使用 base64_encode 用单引号和双引号对密码进行编码

How to encode password with single and double quotes using base64_encode

我正在使用 Postman 调用 API,它要求授权类型为 Basic Auth, 以下是用于演示目的的修改后的凭证, 现在在邮递员生成代码片段中,它显示 Header 为

'Authorization' => 'Basic ZHBjMzpXRWMzXCciSw==',

但是当我使用我的代码执行此操作时,base64 编码的字符串不同,因此导致未经授权的用户。

$username="dpc3";
$psd = 'WEc3\'"K'; // Added one \ before single quote
$credentials = base64_encode($username . ':' . $psd)

使用上面的代码 headers 是

'Authorization' => 'Basic ZHBjMzpXRWMzJyJL'

此编码字符串与 postman 中的不同。邮递员 API 正在工作,但它在代码中不起作用。也许我编码不正确。我在邮递员中添加了没有任何斜杠的密码。 WEc3'"K

非常感谢任何帮助。谢谢

解决方案 1

最简单的方法是像这样使用 stripslashes 函数:

$username = 'dpc3';
$psd = 'WEc3\'"K'; // Added one \ before single quote
$credentials = base64_encode($username . ':' . stripslashes($psd));

解决方案 2

或者您可以简单地将密码中的任何 \' 替换为单个 ' 并将其传递给 base64_encode() 函数,如下所示:

$username = 'dpc3';
$psd = 'WEc3\'"K'; // Added one \ before single quote
$credentials = base64_encode($username . ':' . str_replace('\'', "'", $psd));

有关 str_replace() 的更多信息,请查看 this

如果你执行 base64_decode('ZHBjMzpXRWMzXCciSw==') 它会给你 dpc3:WEc3\'"K

这意味着反斜杠实际上是添加到密码中的。

因此正确的字符串将是:

$username="dpc3";
$psd = 'WEc3\\'"K'; // One backslash and one single quote - both escaped
$credentials = base64_encode($username . ':' . $psd); // ZHBjMzpXRWMzXCciSw==