Как выщить один ключ (как из полученной строки получить массив байт ключа)
Я экспортирую ключ из хранилища ключей и получаю файл следующего вида:
Потом пытаюсь прочитать эту строку в массив байт:
И получаю исключение:
Invalid character in a Base-64 string.
Т.е. это не сам ключ?
Для примера в библиотеке которую я использую есть вот такой ключ
Он работает как надо.
Есть какие-нибудь соображения? Как вытащить ключ?
Спасибо.

комментариев: 112 документов: 20 редакций: 63
Мне посоветовали удалить последнюю строку "=41Ep", т.е. теперь вот стало выглядеть:
И все стало работать – ключем можно пользоваться. А что же это за лишний хвостик такой? Зачем он нужен, зечем при экспортировании ключа он приписывается?
комментариев: 5522 документов: 804 редакций: 850
комментариев: 112 документов: 20 редакций: 63
"Контрольная сумма рассчитывается сложением значений всех байтов секретного ключевого материала по модулю 65536; она применяется, чтобы определить правильность парольной фразы.
Точнее, контрольная сумма нужна, чтобы определить правильность расшифрования ключевого материала."
Завтра поэкспериментирую, получится на таком ключе без контрольной суммы что-либо подписать. Если да, то используемая мной библиотека вообще не проверяет правильность дешифрования.
комментариев: 112 документов: 20 редакций: 63
И этот ключ продолжает работать, если я указываю для его использования неверный пароль – выскакивает исключение "Checksum mismatch at 0 of 20".
Если есть возможность расскажите подробнее, почему так происходит и что это за пять символов в конце.
комментариев: 5522 документов: 804 редакций: 850
Вы говорите о 5 символах, когда контрольная сумма уже удалена? (В Вашем первом комментарии наверху это символы '/dzQ='.) Что именно попадает в этот хвост я не знаю, это нужно декодировать Radix64 и смотреть, что за OpenPGP-пакет помещается в самый конец. Стандарт не предписывает какого-то определённого порядка для компоновки пакетов, порядок их следования может быть вообще произвольным (это не значит, что так и есть: и PGP, и GnuPG формируют сертификат вполне конкретным образом).
комментариев: 112 документов: 20 редакций: 63
Попробую подробнее описать
Вот полный PGP ключ:
Если отрезать от него последние пять символов – "=41Ep", то
1. полученную строку можно перевести в массив байт, используя декодирование Radix64
(если не отрезать, то декодирование не получится)
2. ключ продолжает работать. И проверка параля осуществляется корректно.
(если захочется поэксперементировать – пароль "1").
Потом, пять символов ("=41Ep") совершенно точно не являются закодированным массивом байт, т.к. невозможно произвести их декодирование Radix64.
Вот с этим хвостом из пяти символов я и пытают разобраться.
комментариев: 5522 документов: 804 редакций: 850
комментариев: 112 документов: 20 редакций: 63
Не могу все равно понять.
Если "контрольная сумма нужна, чтобы определить правильность расшифрования ключевого материала" ©, то без этой суммы невозможно будет определить правильность дешифрования.
Однако я удаляю эту сумму и дешифрование проходит корректно:
если для использования PGP-ключа я указываю неверный пароль, то получаю сообщение “Checksum mismatch”.
И потом, если эти пять символов — кодированный массив байт, то как можно получить этот массив?
(Насколько я понял, кодирование байтов с помощью Radix64 ни при каких вводных не приведет к строке из 5 символов)
комментариев: 5522 документов: 804 редакций: 850
Не так. Правильность расшифрования определяется по контрольной сумме (вернее, коду MDC) самого шифртекста.
Контрольная сумма в ASCII-блоке контролирует только точность передачи самого этого блока. Это не особенно полезно для сетевой передачи, поскольку сетевые протоколы сами контролируют ошибки в передаче, но если Вы распечатаете свой ключ на листе бумаги, а потом оцифруете обратно через OCR, такая контрольная сумма может помочь. Попробуйте изменить контрольную сумму Вашего ключа (просто исправив один из символов, скажем, заменив '=41Ep' на '=41Er'), а потом импортируйте этот ключ на связку: Вы получите ошибку о несоответствии контрольной суммы, и операция будет прервана.
Уберите знак '=' в начале, это просто разделитель. Оставшиеся 4 символа и есть кодированная контрольная сумма.
комментариев: 112 документов: 20 редакций: 63
комментариев: 5522 документов: 804 редакций: 850
комментариев: 112 документов: 20 редакций: 63
Она считается только от подписи?
Например у меня есть строка, представляющая собой PGP подпись,
Я могу, зная только эту строку подсчитать контрольную сумму ASCII-блока?
Правильный документ выглядит вот так:
Нужно подсчитать /R4o .
Спасибо.
комментариев: 5522 документов: 804 редакций: 850
В
комментариев: 112 документов: 20 редакций: 63
Спасибо, вот так будет выглядить на C#
(половина из http://www.bouncycastle.org/ ):
Пример использования:
Публикуя комментарий, пожалуйста, придерживайтесь темы / содержания документа.
Прежде, чем добавить вопрос, не забывайте воспользоваться поиском.