我在bash变量中有两个base64数据块。base64数据中通常的换行符已由空格代替,并且该变量基本上是一个非常长的单行字符串。
我可以解码变量中包含的base64数据的两个块,但是在尝试执行此操作时遇到了一些细微差别。我想了解我是否正确处理此问题,或者是否有更好的方法来解码不包含换行符的base64数据。这是我所拥有的:
第一个块是350个字符,我可以像这样成功解码它:
echo ${DATA::350} | openssl base64 -d | wc -c
256
第二个块是5745个字符,但以上命令未产生预期的结果。即:
$ echo {DATA:350} | openssl base64 -d | wc -c
432
但是,如果我把换行符重新插入,它会起作用:
$ echo ${DATA:350} | tr ' ' "\n" | openssl base64 -d | wc -c
4240
我预计会有一些行长问题,第一个块足够小以避免发生,并且这似乎是所使用的base64解码器的功能(两个常用的解码器base64
和的openssl base64
行为不同)。
的base64
解码器(代替openssl base64
)停止在第一无效字符(空格),并因此只是解码而输出的OpenSSL 432个字符(9“线”)的第一个“行”(48个字节的输出数据)。该base64
命令具有忽略垃圾的选项,因此可以正常工作:
$ echo ${DATA:350} | base64 -d -i | wc -c
4240
OpenSSL解码器似乎没有这种选择。
此外,删除空格全部工程base64
,但不是openssl base64
:
$ echo ${DATA:350} | tr -d ' ' | openssl base64 -d | wc -c
400
$ echo ${DATA:350} | tr -d ' ' | base64 -d | wc -c
4240
因此,最后,我替换了换行符并使用了OpenSSL解码器,因为无论如何我都需要进一步处理解码后的数据:
$ openssl enc -d -a -in <(echo ${DATA:350} | /usr/bin/tr ' ' "\n") -aes-256-cbc -pass file:<(echo $skey) | ...
但是我想了解OpenSSL可以解码不包含换行符的base64数据吗?
tr
使用的情况下,使用${var//old[/new}
- 来更改或删除字符本身,但不能与子字符串同时使用。