2016-09-01 10 views
2

ファイルが有効なPGM暗号化ファイルであるかどうかを確認する必要があります。私たちが取得するいくつかのpgpファイルには、pgpの拡張子といくつかありません。どのファイルがpgp暗号化されたファイルで、どのファイルが暗号化されていないか確認する必要があります。私に知らせる方法があれば教えてください。ファイルが有効なPGM暗号化ファイルであることを確認してください

+2

'libmagic'とそれを使用する' file'コマンドを調べてください。 –

答えて

2

唯一の方法は、ファイルの復号化(例:gpg)とエラー出力の解釈です。入力をascii-armoredファイルに制限しない限り、その場合はアーマーをチェックすることができます。

1

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 

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)) 

次の3つの条件を処理することができます:

  • gpgme.Context.decryptメソッドが失敗し、エラーコードはgpgme.ERR_NO_DATAです。これは、データストリームがGnuPGで暗号化されたデータとして認識されなかったことを意味します。

  • gpgme.Context.decryptメソッドが何らかの理由で失敗します。あなたがここで気になる他のエラーを決める必要があります。

  • gpgme.Context.decryptメソッドは成功します。明らかに、ファイルは正しく暗号化されたファイルです。

+0

Python 2.7.13でスクリプトを実行すると、 'NameError:name 'コンテキスト'が定義されていません。 'というメッセージが表示されます。 –

関連する問題