在php中如何在特定文件夹中查找已加密的文件

时间:2009-12-07 11:39:20

标签: php encryption pgp

我正在使用PGP(GNU Privacy Guard)来加密文件。 加密时我删除了加密文件的'.pgp'扩展名。

现在有些我想知道哪个文件已在特定文件夹中加密。

注意: - 我的目标是......不要加密任何文件两次...所以在加密任何文件之前..我想检查的是已加密的文件。< / em>的

在php中我们可以找出哪个文件已经加密了吗?

4 个答案:

答案 0 :(得分:3)

PGP文件全部以"-----BEGIN PGP MESSAGE-----"开头。

所以你可以这样做:

  $content = file_get_contents($filename);
  $encrypted = strpos($content, '-----BEGIN PGP MESSAGE-----') === 0;

答案 1 :(得分:0)

我真的不太了解它是如何工作的,或者你如何查看文件的内容来判断它是否已正确加密,但你能尝试解密它们吗?如果你知道你只使用纯文本文件,你可以检查解密数据的前500字节,如果有奇怪的字符(标准az AZ 0-9 +标点符号之外),那么这可能是一条线索文件未加密

我知道,这真的是一个半答案的答案,但是有点长,以适应评论。

答案 2 :(得分:0)

除非您了解加密中使用的算法,否则不能这样做。理解后,您可以应用它来检查文件是否已加密。

同时检查以确保PGP中已有功能可用于检查某些内容是否已加密。这通常出现在加密解决方案中。

由于

答案 3 :(得分:0)

OpenPGP数据有两种可能的格式,二进制和ascii装甲。

通过查找“----- BEGIN PGP MESSAGE -----”可以轻松识别Ascii装甲文件,这也可以使用unix命令file来完成:

$ file encrypted
encrypted: PGP message
如果您只处理ascii装甲加密文件,那么@ZZ_Coders答案就完全没问了。

如果它显示其他内容,则不是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";