2009-12-07 190 views
1

我正在使用PGP(GNU Privacy Guard)来加密文件。 加密时,我删除了加密文件的'.pgp'扩展名。在php中如何在特定文件夹中找到已加密的文件

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

注: -我的目标是......不加密任何文件两次...所以之前加密任何文件..我想检查已经是加密的文件。

在PHP中,我们可以找出哪些文件已被加密?

回答

0

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

我知道这确实是一个半回答的答案,但要适应评论有点长。

+0

无疑将残酷地慢的潜力。 – meagar 2009-12-22 18:10:21

0

除非您了解加密中使用的算法,否则您无法做到这一点。一旦你了解它,你可以应用它来检查一个文件是否已经被加密。

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

谢谢

3

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

所以,你可以做这样的事情:

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

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

的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"; 
相关问题