我使用对称加密创建了一个加密文件。
gpg -c 50GBfile
现在我想删除原始文件。在删除原始文件之前,我想验证加密文件的完整性。(类似于 ZIP 文件使用 CRC 的方式)。gpg 是否提供了一种验证对称加密文件内容的方法?
答案1
如果您使用 加密文件gpg -c
,则在不知道密码的情况下无法验证文件包含的内容。这是对称加密的核心属性。由于无论如何您都需要提供密码,因此请进行真正的测试:解压缩文件并将其与原始文件进行比较。在 Linux 或其他 unix 变体上:
gpg -d <50GBfile.gpg | cmp - 50GBfile
-s
如果您想要额外的完整性保证,您可以在加密文件时添加选项,使用您的私钥对文件进行签名。
gpg -c -s 50GBfile
然后,您可以使用 验证签名gpg --verify 50GBfile.gpg
。请注意,这只能保证该文件是您签名的文件之一,并不能防止您因错误签名文件而导致错误。
如果您使用非对称加密(使用收件人的公钥 — 您自己的公钥),则验证文件是否具有所需内容将需要收件人的私钥。如果有多个收件人,则任何收件人的私钥都可以。通常,您会将自己的密钥作为所有加密邮件的收件人,使用encrypt-to
或hidden-encrypt-to
放在 GPG 配置文件中。
答案2
gnupg 中唯一的“验证”操作是签名验证,它基本上加密了哈希使用公钥(=sign)对加密文件进行解密。
我认为这意味着如果文件加密时输出位被破坏,则哈希值将根据损坏的文件。你永远不会通过验证发现这一点签名由于您签署了一个已损坏的文件,因此该文件的
看来,确认加密文件是否被损坏的唯一方法是经过漫长的解密生成文件的过程并将其哈希值与原始文件进行比较。
这就是 Sepero 上面提供的内容,但是“你可以验证一下……”它应该是“这仅有的验证方法...”
更新——进一步说明:
几分钟前,我做了这件事:将 9.8GB 的备份文件拆分成 5 个 rar 片段,每个片段都使用 gnupg 进行对称加密。在删除 rar 片段之前,我验证了加密片段的完整性,如上所述:5 个片段中有 1 个未通过哈希测试。我再次解密了该片段,现在解密片段的哈希值与原始 rar 片段匹配。
我对解密后的错误 rar 部分和解密后正确的 rar 部分进行了二进制比较,这两个 2GB 文件中的唯一区别是一个字节:C8 与 48 - 这是由 1 位翻转引起的(即 11001000 与 01001000)。
这个故事的寓意是,如果在良好的 WIN7 系统和良好的 HDD 上,gnupg 可以在解密时翻转一点,那么它也可以在加密时做到这一点。我再也不会跳过这个完整性验证步骤了。
答案3
您可以通过提取并将 md5sum 与原始文件进行比较来验证它。
$ gpg -d 50GBfile | md5sum
gpg: AES256 encrypted data
gpg: gpg-agent is not available in this session
gpg: encrypted with 1 passphrase
1df1aaffb20c5255e282d6f584489993 -
$ md5sum 50GBfile
1df1aaffb20c5255e282d6f584489993 50GBfile
答案4
如果你想验证完整性,你需要符号原始文件也是如此。
gpg --encrypt --sign文件
最后,您可以通过解密文件来验证完整性(基于签名)(自动检查完整性)
gpg——解密文件.asc