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