获取密码的base64版本

Get base64 version of password

我有这个命令:

echo -n "cdt_main!@#$" | base64

失败:

bash: !@#$": event not found

lulz b/c 的特殊字符。 所以我最好的猜测是这是正确的:

echo -n "cdt_main\!\@#$" | base64

至少这是b/c现在没有错误了。不幸的是,我无法测试 base64 版本的密码,直到我知道它是正确的——我只有一次机会让它正确 o/w 有些东西会爆炸。 你觉得合适吗?

使用解码技巧,我有:

echo -n "cdt_main\!\@#$" | base64 | base64 --decode

产生:

cdt_main\!\@#$

鉴于该输出,不确定这是否按计划工作,因为那里有斜线

问题是bash的历史扩展被打开了。除非你的历史扩展是你积极想要和使用的东西,否则解决方案是将其关闭。

观察失败 event not found:

$ echo -n "cdt_main!@#$" | base64
bash: !@#: event not found

但是,这成功了:

$ set +H
$ echo -n "cdt_main!@#$" | base64
Y2R0X21haW4hQCMk

set +H 关闭历史扩展。

备选方案:使用单引号

对于双引号内的字符串,shell 将执行多种扩展。为防止这种情况,请将字符串放在单引号中。

例如,即使启用了历史扩展,以下操作也会成功:

$ set -H
$ echo -n 'cdt_main!@#$' | base64
Y2R0X21haW4hQCMk

便携方法

并非所有 shell 都支持 echo-n 选项。对于更便携的解决方案,应该像 Gordon Davisson 建议的那样使用 printf:

printf "%s" 'cdt_main!@#$' | base64

@John1024 是对的,但更通用的解决方案是使用:

echo -n 'cdt_main!@#$' | base64

单引号'表示字符串中的字符不被bash解释,很好。