我正在使用PGP(GNU Privacy Guard)來加密文件。 加密時,我刪除了加密文件的'.pgp'擴展名。在php中如何在特定文件夾中找到已加密的文件
現在我想知道哪些文件已在特定文件夾中加密。
注: -我的目標是......不加密任何文件兩次...所以之前加密任何文件..我想檢查已經是加密的文件。
在PHP中,我們可以找出哪些文件已被加密?
我正在使用PGP(GNU Privacy Guard)來加密文件。 加密時,我刪除了加密文件的'.pgp'擴展名。在php中如何在特定文件夾中找到已加密的文件
現在我想知道哪些文件已在特定文件夾中加密。
注: -我的目標是......不加密任何文件兩次...所以之前加密任何文件..我想檢查已經是加密的文件。
在PHP中,我們可以找出哪些文件已被加密?
我真的不知道它是如何工作的,或者你怎麼看文件的內容來判斷它是否被正確加密,但是你可以嘗試解密它們嗎?如果您知道您只使用純文本文件,則可以檢查解密數據的前500個字節,並且如果有奇怪的字符(標準az AZ 0-9 +標點符號等之外),那麼這可能是一個線索該文件不是加密。
我知道這確實是一個半回答的答案,但要適應評論有點長。
除非您瞭解加密中使用的算法,否則您無法做到這一點。一旦你瞭解它,你可以應用它來檢查一個文件是否已經被加密。
此外,請檢查以確保PGP中已有可用的功能,用於檢查某些內容是否已被加密。這通常出現在加密解決方案中。
謝謝
PGP文件全部以"-----BEGIN PGP MESSAGE-----"
開頭。
所以,你可以做這樣的事情:
$content = file_get_contents($filename);
$encrypted = strpos($content, '-----BEGIN PGP MESSAGE-----') === 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";
無疑將殘酷地慢的潛力。 – meagar 2009-12-22 18:10:21