Fig*_*edi 5 bash shell echo fritzbox
这让我发疯,我试图根据 fritzbox SPEC 进行一些 MD5 计算来登录。基本上你必须将挑战和密码转换为 UTF-16LE,然后通过 md5 对其进行哈希处理,然后 concatchallenge-md5(uft -16le(挑战密码))
为此,我在脚本中使用 mac OSX 中的 iconv 和 md5
echo -n "challenge-password1234" | iconv -f ISO8859-1 -t UTF-16LE | md5
Run Code Online (Sandbox Code Playgroud)
哪个输出到2f42ad272c7aec4c94f0d9525080e6de
只需将其粘贴到 shell 输出中即可完成确切的操作1722e126192656712a1d352e550f1317
后一个是正确的(被 fritzbox 接受),第一个是错误的。
调用脚本时会产生bash script.sh
正确的哈希值,调用脚本时会产生sh script.sh
错误的哈希值,这会带来新的问题:sh 和 bash 之间的输出有何不同?
不同版本的echo
行为方式截然不同。有些采用命令选项(例如-n
)来修改其行为(包括-n
抑制尾随换行符),而有些则不这样做。有些解释字符串本身中的转义序列(包括\c
在字符串末尾抑制尾随换行符)...有些则不解释。有些人两者兼而有之。您系统上的 (/bin/echo)版本似乎echo
不带选项,因此被视为-n
要打印的字符串。如果您使用的是 bash,它的内置版本会覆盖 /bin/echo,并且会解释标志。
基本上,echo
是一堆不一致和可移植性陷阱。所以不要使用它,printf
而是使用它。它有点复杂,因为您必须指定格式字符串,然后指定您想要打印的实际内容,但它可以节省很多麻烦。
$ printf "%s" "challenge-password1234" | iconv -f ISO8859-1 -t UTF-16LE | md5
1722e126192656712a1d352e550f1317
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是echo
命令实际打印的内容:
$ printf "%s\n" "-n challenge-password1234" | iconv -f ISO8859-1 -t UTF-16LE | md5
2f42ad272c7aec4c94f0d9525080e6de
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1522 次 |
最近记录: |