Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在MinGW上解码base64编码的随机码无效_Bash_Openssl_Base64_Mingw_Git Bash - Fatal编程技术网

Bash 在MinGW上解码base64编码的随机码无效

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

我试图让一个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" | 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上仍然得到了相同的输出。