2009-09-12 2 views
-5

Я пытаюсь декодировать строку с кодировкой base64 с помощью openssl. Однако он работает только 4 раза из 5.Base64 decoding - неправильная длина строки

Декодированная строка должна быть длиной 64 символа. BIO_read() всегда возвращает 64. Однако иногда возвращаемый буфер короче 64!

Любые идеи, что не так? Как я могу получить правильную строку?

+0

Что вы подразумеваете под «возвращенным буфером»? Вы передаете буфер * в * BIO_read. Пример кода поможет. –

+0

Я имею в виду, что BIO_read помещает в пункт назначения. В любом случае, я отследил свою проблему до одиночного символа. Похоже, что иногда BIO_read возвращает тот же символ, что и завершение. и что убивает строку ... – Mantas

ответ

4

Вы используете str [n] cpy? Вы не можете! Закодированные данные Base64 могут содержать нулевые символы, которые C-функции обработки строк интерпретируются как конец строки.

Используйте memcpy вместо str [n] cpy, memcmp вместо strcmp и т. Д. Эти функции требуют, чтобы вы знали свой размер данных, но я считаю, что вы do знаете это.

Также, если вы не очень уверены в строках С-стиля и таких, здесь есть много информации о теме.

+0

Спасибо !!! Это была недостающая часть головоломки. – Mantas

+0

Хммм, это не кодированные данные base64, полностью состоящие из печатаемых символов (a-z, A-Z, 0-9, '+' и '/' [и '=' для заполнения])? – pmg

+1

Я имею в виду данные, которые были закодированы как Base64 (то есть то, что вы возвращаете при декодировании Base64), а не в кодировке Base64. – Artelius

Смежные вопросы