我需要加密并能够使用 解密文件openssl
,目前我只需使用以下命令即可完成此操作:
openssl enc -aes-256-cbc -salt -in "$input_filename" -out "$output_filename"
和解密:
openssl enc -aes-256-cbc -d -salt -in "$input_filename" -out "$output_filename"
但对于大文件,我希望看到进展。
我尝试了以下不同的变体(解密):
pv "$input_filename" | openssl enc -aes-256-cbc -d -salt | pv > "$output_filename"
但这无法要求我输入密码。我不确定该怎么做?
编辑1:
我发现了tar
这个openssl
:
https://stackoverflow.com/a/24704457/1997354
虽然它可能非常有帮助,但我不太明白。
编辑2:
关于命名管道:
几乎可以用了。除了眨眼进度,我无法明显地向您展示,最终结果如下所示:
enter aes-256-cbc decryption password:
1.25GiB 0:00:16 [75.9MiB/s] [==============================================================================================================================================================================================>] 100%
1.25GiB 0:00:10 [ 126MiB/s] [ <=> ]
答案1
你应该试试
openssl enc -aes-256-cbc -d -salt -in "$input_filename" | pv -W >> "$output_filename"
从手册:
-W,--等待:
等待第一个字节传输完毕,然后再显示任何进度信息或计算任何 ETA。如果您通过管道传输的程序在启动之前需要额外信息,例如将数据传输到 gpg(1) 或 mcrypt(1) 中,这在处理数据之前需要密码短语,则非常有用。
这正是你的情况。如果您需要查看进度条,原因由周伟军在下面的评论中,您可以反转管道中命令的顺序:
pv -W "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"
答案2
你需要命名管道这里。
$ mkfifo mypipe
$ pv < mypipe > "$output_filename"|(pv "$input_filename" | openssl enc -aes-256-cbc -d -salt -out mypipe)
这两个命令的输出pv
将交替显示在 tty 窗口的底部。但不确定这是否是您真正需要的。如果您只需要pv
in的输出pv "$input_filename"
,请相应修改上述命令。
编辑
从OP获得更多信息后,我现在确信
pv "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"
足以解决OP的问题真实的需要。