ファイルの暗号化に PGP (GNU Privacy Guard) を使用しています。暗号化中に、暗号化されたファイルの「.pgp」拡張子を削除しました。
ここで、特定のフォルダーで既に暗号化されているファイルを知りたいと思います。
注:- 私の目標は...ファイルを2回暗号化しないことです...したがって、ファイルを暗号化する前に..ファイルがすでに暗号化されているかどうかを確認したいです。
PHP で、どのファイルが既に暗号化されているかを確認できますか?
ファイルの暗号化に PGP (GNU Privacy Guard) を使用しています。暗号化中に、暗号化されたファイルの「.pgp」拡張子を削除しました。
ここで、特定のフォルダーで既に暗号化されているファイルを知りたいと思います。
注:- 私の目標は...ファイルを2回暗号化しないことです...したがって、ファイルを暗号化する前に..ファイルがすでに暗号化されているかどうかを確認したいです。
PHP で、どのファイルが既に暗号化されているかを確認できますか?
PGP ファイルはすべて"-----BEGIN PGP MESSAGE-----"
.
したがって、次のようなことができます。
$content = file_get_contents($filename);
$encrypted = strpos($content, '-----BEGIN PGP MESSAGE-----') === 0;
それがどのように機能するのか、またはファイルの内容を見てファイルが適切に暗号化されているかどうかを確認する方法についてはよくわかりませんが、それらを復号化してみてください。プレーンテキストファイルのみを使用していることがわかっている場合は、復号化されたデータの最初の500バイトを調べることができ、奇妙な文字(標準のaz AZ 0-9 +句読点以外)がある場合は、それが手がかりになる可能性がありますファイルが暗号化されていないこと。
これは本当に中途半端な答えです、私は知っています、しかしコメントに収まるのは少し長かったです。
暗号化で使用されるアルゴリズムを理解しない限り、理解することはできません。理解したら、それを適用して、ファイルがすでに暗号化されているかどうかを確認できます。
また、何かがすでに暗号化されているかどうかを確認するために、PGPで使用可能な機能がすでに存在することを確認してください。これは通常、暗号化ソリューションに存在します。
ありがとう
OpenPGP データには、バイナリと ascii アーマードの 2 つの形式があります。
Ascii で保護されたファイルは、"-----BEGIN PGP MESSAGE-----" を探すことで簡単に認識できます。これは、unix コマンドを使用して行うこともできますfile
。
$ file encrypted
encrypted: PGP message
@ZZ_Codersの回答は、ASCIIの装甲暗号化ファイルのみを扱っている場合はまったく問題ありません。
それ以外のものが表示される場合、それは OpenPGP メッセージではなく、バイナリ形式でもありません。これを認識するのは簡単ではありません (少なくとも、どのマジック パケットを探すことができるかはわかりません) が、gpg
コマンドを使用してファイルを簡単にテストできます。
$ gpg --list-only --list-packets encrypted
:pubkey enc packet: version 3, algo 1, keyid DEAFBEEFDEADBEEF
data: [2048 bits]
:encrypted data packet:
length: 73
mdc_method: 2
暗号化されていない場合、応答は次のようになります。
$ gpg --list-only --list-packets something_else
gpg: no valid OpenPGP data found.
PHP では、次のコードを使用して、ファイルが OpenPGP で暗号化されているかどうかを確認できます。
if (strpos(`gpg --list-only --list-packets my_file.txt 2>&1`,
'encrypted data packet'))
echo "encrypted file";