2009-12-07 44 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"; 
相關問題