У меня есть сообщение OpenPGP, которое выглядит примерно так, данное мне в файле:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.9 (MingW32)
jA0EAgMCtCzaGHIQXY9g0sBnAeDOQ9GuVA/uICuP+7Z2dnjNCLgRN0J/TzJs1qcW
aJYBTkH5KQCClCxjwTYbHZCox1sENfIS+KxpCKJQqAX3SNEFm0ORNE6RNwEgb1Zj
uOdIw8auxUsjmQKFLAcZIPKjBjyJqSQVfmEoteVn1n+pwm8RdIZevCHwLF2URStB
nBVuycaxcaxcaxcxccxcxacqweqweqwe123fsMqQPaTusOBGpEQrWC9jArtvYEUpY
aNF6BfQ0y2CYrZrmzRoQnmtnVu10PagEuWmVxCucyhVwlthVgN0iBog9jhjliQkc
rrDTupqB4IimMEjElGUHtkuvrCQ0jQnOHEAJmmefMDH0NkYKGd5Ngt21I5ge5tob
/uBjHKMxjNgg1nWfg6Lz4jqoKe/EweuEeg==
=+N9N
-----END PGP MESSAGE-----
и мне дали 15-символьную фразу для расшифровки, я полагаю. Но я действительно не имею ни малейшего представления, чтобы расшифровать файл с помощью PHP. Я смотрю на Страница руководства PHP GnuPG и под gnugpg_decrypt()
Пример, который дает этот код:
$res = gnupg_init();
gnupg_adddecryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC","test");
$plain = gnupg_decrypt($res,$encrypted_text);
echo $plain;
Итак, взглянем на эту функцию gnupg_adddecryptkey
упомянул мне нужен отпечаток пальца. Что это на самом деле? И где это взять?
Отпечаток пальца — это хеш-сумма, рассчитанная для открытого ключа и некоторых метаданных, таких как время создания ключа. Он также возвращается после импорта ключа через gnupg_import
как fingerprint
приписывать.
Это для криптографии с открытым / закрытым ключом, которая, по-видимому, не используется: при шифровании парольной фразой вы пропускаете часть криптографии с открытым / закрытым ключом и напрямую используете симметричное шифрование для сообщения с ключом сеанса (иногда также называется шифровальный блок или симметричный ключ), полученный из вашей парольной фразы.
Симметричное шифрование не поддерживается модулем PHP GnuPG. Нет функций для выполнения симметричного дешифрования, и это ограничение также описано в исходная документация модуля:
Этот класс предоставляет объектно-ориентированный интерфейс для GNU Privacy Guard (GPG).
Хотя GPG может поддерживать криптографию с симметричным ключом, этот класс предназначен только для упрощения криптографии с открытым ключом.
Вы должны будете выполнить расшифровку вручную, позвонив gpg
, Пример командной строки будет
gpg --symmetric --decrypt [file]
(в качестве альтернативы, вы также можете предоставить ввод через STDIN). Для передачи ключевой фразы, посмотрите на GnuPG --passphrase...
опции:
--passphrase-fd n
Прочитайте фразу-пароль из файлового дескриптора n. Только первая строка будет прочитана из файлового дескриптора n. Если вы используете 0 для n, фраза-пароль будет считана из STDIN. Это может
использовать только в том случае, если указана только одна фраза-пароль.
--passphrase-file file
Прочитайте фразу-пароль из файла. Из файла будет прочитана только первая строка. Это можно использовать только в том случае, если указана только одна фраза-пароль. Очевидно, пароль
хранится в файле сомнительной безопасности, если другие пользователи могут читать этот файл. Не используйте эту опцию, если вы можете избежать этого.
--passphrase string
Используйте строку в качестве пароля. Это можно использовать только в том случае, если указана только одна фраза-пароль. Очевидно, это очень сомнительная безопасность в многопользовательской системе. Не использовать
этот вариант, если вы можете избежать этого.
Помните, что все другие пользователи компьютера могут читать все аргументы командной строки других пользователей, особенно для платформ общего хостинга, --passphrase
это определенный запрет
Этот ответ совместим не только с PHP, но и с GnuGPG в целом. Чтобы суммировать ответ Йенса Эрата и добавить этап шифрования для всех, кто сталкивался с этим вопросом, вот решение, если предположить, что существует файл под названием passwords.txt
:
// encrypt
gpg --output passwords.gpg --symmetric passwords.txt
// decrypt
gpg —decrypt passwords.gpg