我正在使用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