в php, как найти уже зашифрованный файл в определенной папке

Я использую PGP (GNU Privacy Guard) для шифрования файла. при шифровании я удалил расширение «.pgp» зашифрованного файла.

Теперь я хочу узнать, какой файл уже зашифрован в конкретной папке.

Примечание. моя цель состоит в том, чтобы... не шифровать файл дважды... поэтому перед шифрованием любого файла... я хочу проверить, не зашифрован ли файл уже.

в php мы можем узнать, какой файл уже зашифрован?


person Rahul Waghmare    schedule 07.12.2009    source источник


Ответы (4)


Файл PGP начинается с "-----BEGIN PGP MESSAGE-----".

Итак, вы можете сделать что-то вроде этого:

  $content = file_get_contents($filename);
  $encrypted = strpos($content, '-----BEGIN PGP MESSAGE-----') === 0;
person ZZ Coder    schedule 07.12.2009

Я действительно мало знаю о том, как это работает, или о том, как можно просмотреть содержимое файла, чтобы определить, правильно ли он зашифрован, но не могли бы вы попробовать его расшифровать? Если вы знаете, что работаете только с обычными текстовыми файлами, вы можете проверить первые 500 байт расшифрованных данных, и если есть странные символы (за пределами стандартных az A-Z 0-9 + знаки препинания и т. д.), то это может быть подсказкой. что файл не был зашифрован.

Я знаю, что это действительно половинчатый ответ, но он был немного длинным, чтобы поместиться в комментарий.

person Community    schedule 07.12.2009
comment
Имеет потенциал быть жестоко медленным. - person meagar; 22.12.2009

Вы не можете, если не понимаете алгоритм, используемый в шифровании. Как только вы это поймете, вы можете применить это, чтобы проверить, зашифрован ли уже файл.

Также убедитесь, что в PGP уже есть функция для проверки того, что что-то уже зашифровано. Это обычно присутствует в решениях для шифрования.

Спасибо

person Sarfraz    schedule 07.12.2009

Существует два возможных формата данных 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";
person Jens Erat    schedule 09.01.2013