我需要检查文件是否是有效的pgp加密文件。我们得到的一些pgp文件有pgp的扩展名,而有些则不行。我需要检查哪些文件是pgp加密文件,哪些不是。如果有办法告诉我们,请告诉我。
答案 0 :(得分:2)
The only certain way is to attempt decrypting the file (e.g. with gpg) and interpret the error output. Unless you limit input to ascii-armored files, in that case you can check for the armor.
答案 1 :(得分:2)
python-gpgme library是GPGME的Pythonic包装器,该库允许编程GnuPG访问。
如果您有一些文件可能加密或未加密GnuPG:
$ head --bytes=1024k < /dev/urandom > lorem
$ head --bytes=1024k < /dev/urandom | gpg --encrypt --recipient DEADBEEF > ipsum
使用gpgme
模块,您可以尝试解密文件:
import gpgme
import io
context = gpgme.Context()
for infile_path in ['lorem', 'ipsum']:
with open(infile_path, 'rb') as infile:
outfile = io.BytesIO()
try:
context.decrypt(infile, outfile)
except gpgme.GpgmeError as exc:
if exc.code == gpgme.ERR_NO_DATA:
print(
"Not a GnuPG-encrypted file: ‘{path}’ ({error})".format(
path=infile.name, error=exc.strerror))
else:
print(
"Error decrypting file: ‘{path}’ ({error})".format(
path=infile.name, error=exc.strerror))
else:
print("Successfully decrypted: ‘{path}’".format(
path=infile.name))
这可以让你处理三个条件:
gpgme.Context.decrypt
方法失败,错误代码为gpgme.ERR_NO_DATA
。这意味着数据流未被识别为GnuPG加密数据。
由于某些其他原因,gpgme.Context.decrypt
方法失败。您需要在此确定您关心的其他错误。
gpgme.Context.decrypt
方法成功。显然,该文件是一个正确加密的文件。