Encoding 解码两个不同的base64字符串将返回相同字符串的两倍

Encoding 解码两个不同的base64字符串将返回相同字符串的两倍,encoding,debian,base64,basic-authentication,dyndns,Encoding,Debian,Base64,Basic Authentication,Dyndns,base64编码/解码使用确定性算法。因此,给定的输入字符串将始终编码为已知的输出字符串,反之亦然 使用浏览器访问受基本身份验证保护的URL,浏览器将用户名:密码对编码为base64字符串,并将该字符串放入HTTP授权请求标头中。使用Firebug可以很容易地从网络监视器读取编码的字符串——我们称之为字符串A 在raspberry(运行Debian Wheezy)上,我安装了ddclient以使用dyndns更新我域的dns记录。ddclient配置具有与使用浏览器访问URL相同的用户名:密码对

base64编码/解码使用确定性算法。因此,给定的输入字符串将始终编码为已知的输出字符串,反之亦然

使用浏览器访问受基本身份验证保护的URL,浏览器将用户名:密码对编码为base64字符串,并将该字符串放入HTTP授权请求标头中。使用Firebug可以很容易地从网络监视器读取编码的字符串——我们称之为字符串A

在raspberry(运行Debian Wheezy)上,我安装了ddclient以使用dyndns更新我域的dns记录。ddclient配置具有与使用浏览器访问URL相同的用户名:密码对。客户端甚至尝试访问相同的URL(使用基本身份验证),但由于身份验证错误,访问失败。在ddclient的调试输出中,我可以读取base64编码的字符串——我们称之为字符串B

由于任何原因,字符串A和字符串B是不同的!但它们是从相同的用户名:密码对创建的。如果我解码Debian shell中的字符串

echo myBase64EncodedStringGoesHere | base64 --decode
或者在浏览器控制台中使用JavaScript

atob('myBase64EncodedStringGoesHere')
结果总是相同的用户名:密码对,无论我解码字符串A还是字符串B

我唯一的解释是,ddclient的username:password配置中可能有一些不可见的控制字符,影响base64编码结果。因此,我使用
vi
编辑器with命令检查了ddclient配置

:set list
看起来很好。我被难住了。有人有胶水吗?怎么了

更新1 由于@C4stor的评论,我检查了当我获取用户名:密码对并使用shell命令对其进行编码时会发生什么

echo username:password | base64
结果,我得到了一个字符串,在末尾填充字符
=
。除了填充之外,debian操作系统还创建了与web浏览器(在Windows上使用)相同的字符串

更新2 根据@umläute的要求,这里有两个演示字符串:

Stirng A:bXlkb21haW4uY29tOmRueURucz
字符串B:bXlkb21haW4uY29tOmR5bkRucz
在浏览器控制台中使用

atob('STRING')

始终提供相同的解码字符串。

在ddclient的配置文件中,一定有一些不可见的控制字符,可能是由于复制和粘贴

使用
vi
我从文件中删除了内容,并手动写下每一行。现在,ddclient生成预期的base64编码字符串


我仍然想知道为什么我不能用vi的
:set list
命令看到字符,但至少现在问题解决了。

维基百科引用了14种Base64解码和编码变体。你的覆盆子和萤火虫会不会用的不一样?好吧,说得好。我查过了。我用检查结果更新了问题。您不能尝试在问题中提供实际的base64编码字符串吗?(只需将您的系统配置为使用不存在的用户名/密码,以避免泄露您的秘密)当然,请参阅更新2中的问题