Bash 在MinGW上解码base64编码的随机码无效
我试图让一个bash脚本在MinGW上工作,但是shell似乎无法解码如下内容Bash 在MinGW上解码base64编码的随机码无效,bash,openssl,base64,mingw,git-bash,Bash,Openssl,Base64,Mingw,Git Bash,我试图让一个bash脚本在MinGW上工作,但是shell似乎无法解码如下内容 t=$(openssl rand -base64 64) echo "$t" | base64 --decode 导致, Ԋ7▒% ▒7▒SUfX▒L:o<x▒▒䈏ţ94V▒▒▒▒uW;▒▒pxu▒base64: invalid input 有人知道我做错了什么吗 谢谢我通过将--ignore garbage标志传递给base64解码解决了上述问题。它忽略非字母字符 echo "$t" | ba
t=$(openssl rand -base64 64)
echo "$t" | base64 --decode
导致,
Ԋ7▒%
▒7▒SUfX▒L:o<x▒▒䈏ţ94V▒▒▒▒uW;▒▒pxu▒base64: invalid input
有人知道我做错了什么吗
谢谢我通过将
--ignore garbage
标志传递给base64解码解决了上述问题。它忽略非字母字符
echo "$t" | base64 --decode --ignore-garbage
然而,我仍然想知道我是如何创造“垃圾”的 我通过将
--ignore garbage
标志传递给base64解码器解决了上述问题。它忽略非字母字符
echo "$t" | base64 --decode --ignore-garbage
然而,我仍然想知道我是如何创造“垃圾”的 我认为这里发生的事情是base64字符串包含一些嵌入空格,这导致了实际的“无效输入”w(以及您观察到的垃圾)
openssl rand-base64
命令引入了一些换行符(不是空格),例如
openssl rand-base64>b64.txt
。。。然后在编辑器中查看b64.txt文件,我会看到两行独立的代码
tPKqKPbH5LkGu13KR6zDdJOBpUGD4pAqS6wKGS32EOyJaK0AmTG4da3fDuOI4T+k
abInqlQcH5k7k9ZVEzv8FA==
。。。这意味着在“k”和“a”之间有一个换行符
所以base64字符串有这个内嵌的换行符。base64-d
可以处理换行符(如您成功的示例所示),但不能处理空格字符
换行符可以通过shell的某些操作转换为空格。这很可能是由echo$t
发生的,即如果t
中有换行符,则echo将用单个空格替换。实际上,它的行为取决于shell选项和应用的字符串引号的类型(如果有的话)
要修复该命令,我们可以在管道传输到base64-d
命令之前删除换行符
一种方法是使用tr
命令,例如,在Linux上可以执行以下操作:
t=$(openssl rand -base64 64 | tr -d '\n')
echo $t | base64 -d
。。。或者,再次使用tr
t=$(openssl rand -base64 64)
echo $t | tr -d ' ' | base64 -d
我认为这里发生的事情是base64字符串包含一些嵌入的空格,这导致了实际的“无效输入”w(以及您观察到的垃圾)
openssl rand-base64
命令引入了一些换行符(不是空格),例如
openssl rand-base64>b64.txt
。。。然后在编辑器中查看b64.txt文件,我会看到两行独立的代码
tPKqKPbH5LkGu13KR6zDdJOBpUGD4pAqS6wKGS32EOyJaK0AmTG4da3fDuOI4T+k
abInqlQcH5k7k9ZVEzv8FA==
。。。这意味着在“k”和“a”之间有一个换行符
所以base64字符串有这个内嵌的换行符。base64-d
可以处理换行符(如您成功的示例所示),但不能处理空格字符
换行符可以通过shell的某些操作转换为空格。这很可能是由echo$t
发生的,即如果t
中有换行符,则echo将用单个空格替换。实际上,它的行为取决于shell选项和应用的字符串引号的类型(如果有的话)
要修复该命令,我们可以在管道传输到base64-d
命令之前删除换行符
一种方法是使用tr
命令,例如,在Linux上可以执行以下操作:
t=$(openssl rand -base64 64 | tr -d '\n')
echo $t | base64 -d
。。。或者,再次使用tr
t=$(openssl rand -base64 64)
echo $t | tr -d ' ' | base64 -d
我懂了。但是,当我在做‘echo’…“| base64——解码时,新行字符不是还在吗“还有吗?@Starx。。。“你们说得对,”我澄清了答案,强调了换行符和空格字符的区别。谢谢你们的更新,但我在MinGW上仍然得到了相同的输出。我明白了。但是当我在做“echo”…“| base64--decode”的时候,新行字符不会还在吗?@Starx…你说得对,我澄清了答案,强调了新行字符和空格字符的区别谢谢更新,但我在MinGW上仍然得到了相同的输出。