我正在尝试创建一个自解压加密存档。这是对我不起作用的代码:
openssl enc -aes-256-cfb -salt -d -a | tar -x -j <<EOF
U2FsdGVkX19f7pGFSqDXJSREp/oDxJD0oii/FYvJlJpO8fB5ttZ/Qc8vSwIOS2y0
QUlWLocow4S1YWf86615Ji3n16RLvhOIRiy9S8DNGXl9C6ea1FYDdiuy2lA75lME
...
8yQIpRng/gXItWlaGJapqW9z2wx7y2im/lPGM8UrwZN9uY3DuRx3XbpMY5yuRWU0
oArQEvKxBAP/bB689j4P291Oauw1E8++na9phkEUXJY=
EOF
输出:
enter aes-256-cfb decryption password:tar: Unrecognized archive format
tar: Error exit delayed from previous errors.
嵌入的 base64 数据应使用解密openssl
,其输出应通过管道传输到tar
.openssl
应该能够询问用户密码。如果我删除tar
管道:
openssl enc -aes-256-cfb -salt -d -a >outfile <<EOF
...
然后一切正常。因此,我假设 openssl 可以处理密码提示和来自终端的输入,而不会干扰 stdin/stdout (可能提示会进入 stderr 并且密码读取是使用一些 tty 魔法实现的)。
我设法通过以下结构解决了这项任务:
{ openssl enc -aes-256-cfb -salt -d -a | tar -x -j; } <<EOF
...
但我不明白第一个脚本有什么问题。
答案1
此处文档的结尾应位于 openssl 的前面(或后面)。
你做了什么:
sed -e s/^/water/ | sed -e s/^/wine/ <<EOF
hello world
EOF
(你需要ctrl-d在这里)
给 :
winehello world
只有第二个 sed 工作(只有酒,没有水),你必须做什么:
sed -e s/^/water/ <<EOF | sed -e s/^/wine/
hello world
EOF
给 :
winewaterhello world
如你所见,hello world
被变成waterhello world
, then winewaterhello world
。
你应该试试
openssl enc -aes-256-cfb -salt -d -a <<EOF | tar -x -j