Как выщить один ключ (как из полученной строки получить массив байт ключа)
Я экспортирую ключ из хранилища ключей и получаю файл следующего вида:
Потом пытаюсь прочитать эту строку в массив байт:
И получаю исключение:
Invalid character in a Base-64 string.
Т.е. это не сам ключ?
Для примера в библиотеке которую я использую есть вот такой ключ
Он работает как надо.
Есть какие-нибудь соображения? Как вытащить ключ?
Спасибо.
комментариев: 143 документов: 31 редакций: 143
Мне посоветовали удалить последнюю строку "=41Ep", т.е. теперь вот стало выглядеть:
И все стало работать – ключем можно пользоваться. А что же это за лишний хвостик такой? Зачем он нужен, зечем при экспортировании ключа он приписывается?
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 143 документов: 31 редакций: 143
"Контрольная сумма рассчитывается сложением значений всех байтов секретного ключевого материала по модулю 65536; она применяется, чтобы определить правильность парольной фразы.
Точнее, контрольная сумма нужна, чтобы определить правильность расшифрования ключевого материала."
Завтра поэкспериментирую, получится на таком ключе без контрольной суммы что-либо подписать. Если да, то используемая мной библиотека вообще не проверяет правильность дешифрования.
комментариев: 143 документов: 31 редакций: 143
И этот ключ продолжает работать, если я указываю для его использования неверный пароль – выскакивает исключение "Checksum mismatch at 0 of 20".
Если есть возможность расскажите подробнее, почему так происходит и что это за пять символов в конце.
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 143 документов: 31 редакций: 143
Попробую подробнее описать
Вот полный PGP ключ:
Если отрезать от него последние пять символов – "=41Ep", то
1. полученную строку можно перевести в массив байт, используя декодирование Radix64
(если не отрезать, то декодирование не получится)
2. ключ продолжает работать. И проверка параля осуществляется корректно.
(если захочется поэксперементировать – пароль "1").
Потом, пять символов ("=41Ep") совершенно точно не являются закодированным массивом байт, т.к. невозможно произвести их декодирование Radix64.
Вот с этим хвостом из пяти символов я и пытают разобраться.
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 143 документов: 31 редакций: 143
Не могу все равно понять.
Если "контрольная сумма нужна, чтобы определить правильность расшифрования ключевого материала" ©, то без этой суммы невозможно будет определить правильность дешифрования.
Однако я удаляю эту сумму и дешифрование проходит корректно:
если для использования PGP-ключа я указываю неверный пароль, то получаю сообщение “Checksum mismatch”.
И потом, если эти пять символов — кодированный массив байт, то как можно получить этот массив?
(Насколько я понял, кодирование байтов с помощью Radix64 ни при каких вводных не приведет к строке из 5 символов)
комментариев: 11558 документов: 1036 редакций: 4118
Не так. Правильность расшифрования определяется по контрольной сумме (вернее, коду MDC) самого шифртекста.
Контрольная сумма в ASCII-блоке контролирует только точность передачи самого этого блока. Это не особенно полезно для сетевой передачи, поскольку сетевые протоколы сами контролируют ошибки в передаче, но если Вы распечатаете свой ключ на листе бумаги, а потом оцифруете обратно через OCR, такая контрольная сумма может помочь. Попробуйте изменить контрольную сумму Вашего ключа (просто исправив один из символов, скажем, заменив '=41Ep' на '=41Er'), а потом импортируйте этот ключ на связку: Вы получите ошибку о несоответствии контрольной суммы, и операция будет прервана.
Уберите знак '=' в начале, это просто разделитель. Оставшиеся 4 символа и есть кодированная контрольная сумма.
комментариев: 143 документов: 31 редакций: 143
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 143 документов: 31 редакций: 143
Она считается только от подписи?
Например у меня есть строка, представляющая собой PGP подпись,
Я могу, зная только эту строку подсчитать контрольную сумму ASCII-блока?
Правильный документ выглядит вот так:
Нужно подсчитать /R4o .
Спасибо.
комментариев: 11558 документов: 1036 редакций: 4118
В спецификации этим деталям посвящён целый раздел под номером 6. В разделе 6.1 даже приводится сишная реализация CRC-24, используемая для подсчёта контрольной суммы.
комментариев: 143 документов: 31 редакций: 143
(половина из http://www.bouncycastle.org/ ):
Пример использования: