获取密码的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解释,很好。
我有这个命令:
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解释,很好。