获取密码

时间:2018-03-15 20:49:29

标签: bash shell base64 echo

我有这个命令:

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\!\@#$

给定输出,不确定这是否按计划工作,因为斜杠在那里

2 个答案:

答案 0 :(得分:2)

问题在于打开了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都不支持-n的{​​{1}}选项。对于更便携的解决方案,应该Gordon Davisson建议使用echo

printf

答案 1 :(得分:1)

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

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

单引号'表示字符串中的字符不是由bash解释的,非常好。