我正在使用 PGP(GNU Privacy Guard)来加密文件。在加密时,我删除了加密文件的“.pgp”扩展名。
现在有些我想知道哪个文件已经在特定文件夹中加密。
注意:- 我的目标是......不要加密任何文件两次......所以在加密任何文件之前......我想检查文件是否已经加密。
在php中我们可以找出哪个文件已经加密了吗?
我正在使用 PGP(GNU Privacy Guard)来加密文件。在加密时,我删除了加密文件的“.pgp”扩展名。
现在有些我想知道哪个文件已经在特定文件夹中加密。
注意:- 我的目标是......不要加密任何文件两次......所以在加密任何文件之前......我想检查文件是否已经加密。
在php中我们可以找出哪个文件已经加密了吗?
PGP 文件都以"-----BEGIN PGP MESSAGE-----"
.
所以你可以做这样的事情:
$content = file_get_contents($filename);
$encrypted = strpos($content, '-----BEGIN PGP MESSAGE-----') === 0;
OpenPGP 数据有两种可能的格式,二进制和 ascii Armored。
通过查找“-----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";
我真的不太了解它是如何工作的,或者你如何查看文件的内容来判断它是否被正确加密,但你能尝试解密它们吗?如果你知道你只使用纯文本文件,你可以检查解密数据的前 500 个字节,如果有奇怪的字符(在标准 az AZ 0-9 + 标点符号等之外),那么这可能是一个线索该文件未加密。
我知道,这确实是一个半开玩笑的答案,但是要放入评论中有点长。
除非您了解加密中使用的算法,否则您不能。一旦你理解了它,你就可以应用它来检查文件是否已经被加密。
还要检查以确保 PGP 中已经有一个函数可用于检查某些内容是否已加密。这通常存在于加密解决方案中。
谢谢