解码两个不同的 base64 字符串 returns 两次相同的字符串
decoding two different base64 strings returns two times the same string
base64编码/解码使用确定性算法。因此,给定的输入字符串将始终编码为已知的输出字符串,反之亦然。
使用浏览器访问受基本身份验证保护的 URL,浏览器将 username:password 对编码为 base64 字符串,并将该字符串放入 HTTP 授权请求 header。使用 Firebug 可以很容易地从网络监视器中读取该编码字符串 - 我们称它为字符串 A.
在树莓派 (运行 Debian Wheezy) 上,我安装了 ddclient 以使用 dyndns 为我的域更新 dns 记录。 ddclient 配置提供了与浏览器访问 URL 相同的 username:password 对。客户端甚至尝试访问相同的 URL(使用基本身份验证),但由于身份验证错误,访问失败。在 ddclient 的调试输出中,我可以读取 base64 编码的字符串——我们称之为字符串 B。
无论出于何种原因,字符串 A 和字符串 B 都不同!但它们是从相同的 username:password 对创建的。如果我解码 Debian shell
中的字符串
echo myBase64EncodedStringGoesHere | base64 --decode
或在浏览器控制台中使用 JavaScript
atob('myBase64EncodedStringGoesHere')
无论我解码字符串 A 还是字符串 B,结果总是相同的 username:password 对。
我唯一的解释是ddclient的username:password配置中可能有一些non-visible控制字符,影响了base64编码的结果。因此,我使用 vi
编辑器和命令
检查了 ddclient 配置
:set list
看起来一切都很好。我很难过。有人知道怎么回事吗?
更新 1
因为@C4stor 的评论,我检查了当我使用 username:password 对并使用 shell 命令对其进行编码时会发生什么
echo username:password | base64
结果我得到了字符串 A,最后带有填充字符 ==
。除了填充之外,debian OS 创建了与网络浏览器(用于 Windows)相同的字符串。
更新 2
应@umläute 的要求,这里有两个演示字符串:
Stirng A: bXlkb21haW4uY29tOmR<strong>ueU</strong>Rucz
字符串 B:bXlkb21haW4uY29tOmR<strong>5bk</strong>Rucz
使用
在浏览器控制台中解码它们
atob('STRING')
始终给出相同的解码字符串。
在 ddclient 的配置文件中一定有一些不可见的控制字符,可能是由于复制和粘贴...
Using vi
我把文件里的内容删掉了,每一行都是手写的。现在 ddclient 生成预期的 base64 编码字符串。
我仍然想知道为什么我用vi的:set list
命令看不到字符,但至少现在问题解决了。
base64编码/解码使用确定性算法。因此,给定的输入字符串将始终编码为已知的输出字符串,反之亦然。
使用浏览器访问受基本身份验证保护的 URL,浏览器将 username:password 对编码为 base64 字符串,并将该字符串放入 HTTP 授权请求 header。使用 Firebug 可以很容易地从网络监视器中读取该编码字符串 - 我们称它为字符串 A.
在树莓派 (运行 Debian Wheezy) 上,我安装了 ddclient 以使用 dyndns 为我的域更新 dns 记录。 ddclient 配置提供了与浏览器访问 URL 相同的 username:password 对。客户端甚至尝试访问相同的 URL(使用基本身份验证),但由于身份验证错误,访问失败。在 ddclient 的调试输出中,我可以读取 base64 编码的字符串——我们称之为字符串 B。
无论出于何种原因,字符串 A 和字符串 B 都不同!但它们是从相同的 username:password 对创建的。如果我解码 Debian shell
中的字符串echo myBase64EncodedStringGoesHere | base64 --decode
或在浏览器控制台中使用 JavaScript
atob('myBase64EncodedStringGoesHere')
无论我解码字符串 A 还是字符串 B,结果总是相同的 username:password 对。
我唯一的解释是ddclient的username:password配置中可能有一些non-visible控制字符,影响了base64编码的结果。因此,我使用 vi
编辑器和命令
:set list
看起来一切都很好。我很难过。有人知道怎么回事吗?
更新 1
因为@C4stor 的评论,我检查了当我使用 username:password 对并使用 shell 命令对其进行编码时会发生什么
echo username:password | base64
结果我得到了字符串 A,最后带有填充字符 ==
。除了填充之外,debian OS 创建了与网络浏览器(用于 Windows)相同的字符串。
更新 2
应@umläute 的要求,这里有两个演示字符串:
Stirng A: bXlkb21haW4uY29tOmR<strong>ueU</strong>Rucz
字符串 B:bXlkb21haW4uY29tOmR<strong>5bk</strong>Rucz
使用
atob('STRING')
始终给出相同的解码字符串。
在 ddclient 的配置文件中一定有一些不可见的控制字符,可能是由于复制和粘贴...
Using vi
我把文件里的内容删掉了,每一行都是手写的。现在 ddclient 生成预期的 base64 编码字符串。
我仍然想知道为什么我用vi的:set list
命令看不到字符,但至少现在问题解决了。