解密并解压脚本中嵌入的文件

解密并解压脚本中嵌入的文件

我正在尝试创建一个自解压加密存档。这是对我不起作用的代码:

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

相关内容