用openssl和tarencryption磁带文件

我正试图通过openssl将输出pipe道添加到当前的磁带备份脚本,目前我有:

tar -czpvf /dev/nst0 /home /otherdir

所以joinopenssl给出了这个:

tar czpvf - /home /otherdir | openssl aes-256-cbc -e -salt -pass file:/my_passwd > /dev/nst0

这不会给出任何错误,但是我可以在网上find解密的唯一方法是:

dd if=/dev/nst0 conv=sync | openssl aes-256-cbc -d -salt -pass file:/my_passwd | tar xzpvf -

这给出了正确的文件列表,但我得到:

bad decrypt 8340:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:461:

每次。

我能做些什么来解决这个问题?

我想这可能与使用分组密码有关。

我遇到类似的错误:

 $ tar czpvf - /test/directory |openssl aes-256-cbc -e -salt -pass pass:password | dd of=/tmp/foo.encrypted.tgz $ dd if=/tmp/foo.encrypted.tgz conv=sync | openssl aes-256-cbc -d -salt -pass pass:password |tar xzpvf - 

但是当我使用rc4等stream密码时,例如:

 $ tar czpvf - /test/directory |openssl rc4 -e -salt -pass pass:fred | dd of=/tmp/foo.encrypted.tgz 

我没有得到这个错误。

大多数情况下,我看到来自OpenSSL的这种错误信息是由于错误的密码造成的。 你可以暂时尝试如果replacefile:/my_passwdpass:yourpassword你的pass:yourpassword在解密行继续好吗? 当然,这将是一个不好的永久性解决scheme,但请尝试这一点来进行debugging。

您需要将input填充到分组密码。 尝试用4k的块大小和conv = sync选项pipe道你的焦油到dd。 这将填充数据的结尾。

您最好使用mbuffer写入磁带,因为它可以处理磁带跨越和缓冲(减less擦鞋),并且可以全部写入,以保持磁带驱动器的快乐。 查看这个答案的示例脚本。 mbufferstdin读取,所以压缩和encryption不是一个问题,即使跨越多个磁带( tar不能做的东西)。

至于需要sync使用dd ,这是因为磁带驱动器需要写入块。 看到这个答案为什么的详细描述,但简短的答案是,再次使用mbuffer写入固定大小的块(例如,每个256kB)的数据解决了这个问题。