Я работаю над приложением Node, в которое я встроил функцию дешифратора, и использовал модуль npm Openpgp.js для выполнения этой работы. Я беру различные представленные клиентские файлы PGP, созданные с помощью нашего открытого ключа, расшифровываю их, используя наш закрытый ключ, по мере их поступления, и помещаю расшифрованные версии в папку, чтобы я мог получить к ней доступ, и все вроде бы хорошо .... пока поскольку файлы бронированы. Вот несколько примеров строк кода, показывающих порядок событий:
const encryptedData = fs.readFileSync(encryptedFilePath, 'utf8')
openpgp.decrypt({
message: openpgp.message.readArmored(encryptedData),
publicKeys,
privateKey
}).then( (decrypted) => { fs.writeFile(decryptedFilePath, decrypted.data } )
Когда приходит бронированный файл, все в порядке, и я получаю расшифрованный файл в указанной папке. Эти файлы при открытии в текстовом редакторе имеют следующий формат:
-----BEGIN PGP MESSAGE-----
WBh2X7KwfEBDx0LEE1FzlnvxZs44o62FclpTazJpcl9J7DjwVfg9cHCID0TAN6Y6
B3b5bCQQFe1wTgpIkVtd0mFGQx7KGHj4FGte53qseVxC2bfq9PGKRIAUg6olr+82
Однако у нас есть клиенты, которые шифруют файлы с отключенной опцией защиты, поэтому они приходят в шестнадцатеричном формате при открытии в текстовом редакторе ...
7403 436d e6c0 f941 daac 945b 9a81 f066
6cd2 0032 5df0 9ca2 23a0 6eec a7bb f24c
a941 99a8 1053 ae23 f88b 245c f709 c2b2
..... или как закодированные текстовые файлы, которые выглядят так:
DµÉ‰í+�3K€Ð�˜PªeZ_|Ò®ó0��ãZqRµ3!ŒpuÉW�NZrìÚk´
Aˆ›œiêø8�Ú�ól:äΟ”�6‡)
w�¬ÌŒWÝÚ¢�Q��œ�œ?�H¨¿�œ//�ÃBA�´>(%°�e�
(Эти последние два напоминают то, что я вижу, когда консоль регистрирую "encryptedData" выше в моем примере кода.)
Всякий раз, когда приходят какие-либо незащищенные файлы, процесс завершается неудачно, и я сначала получал несколько разных ошибок в зависимости от типа, показанного выше. Я убрал кодировку utf8 в fs.readFileSync и поставил fromBinary вместо readArmored, чтобы работать с данными как с двоичным мышлением, которое могло бы работать, но затем я получаю сообщение об ошибке «Недопустимый ключ сеанса для дешифрования». Итак, я попытался использовать функцию «decryptSessionKey» перед основным дешифрованием, как это показано в документации, и в результате получил неопределенный ключ и ошибку «Не найден пакет с симметрично зашифрованным ключом сеанса». Кроме того, я, вероятно, лаю не на то дерево, поскольку для использования двоичного файла с Openpgp.js, похоже, требуется пароль, который, как я думаю, отличается от кодовой фразы, которая разблокирует мой закрытый ключ, который является единственным паролем, который у меня есть.
Я просмотрел всю документацию Openpgp.js и погуглил, как сумасшедший, но, похоже, не нашел надежной процедуры, как изменить мой код, который работает для защищенных файлов ASCII для дешифрования файлов, которые не защищены. (Однако каждый поступающий файл расшифровывается быстро и без ошибок при использовании настольной программы для расшифровки, такой как PGP Desktop, поэтому я не могу понять, где мое несоответствие и почему решение неочевидно.) У кого-то есть опыт. с этим или возможным решением?
openpgp.message.fromBinary()
вместоopenpgp.message.readArmored()
. У меня нет более глубокого опыта в JavaScript, но я считаю, что вы могли бы сделатьtry { message = openpgp.message.readArmored(encryptedData); } catch(err) { message = openpgp.message.fromBinary(encryptedData); }
перед вызовомopenpgp.decrypt()
функции наmessage
. - person 0range   schedule 28.02.2017