2014-10-09 6 views
3

я пытаюсь кодировать этот байтовый массив:Java Base64 кодирование дает различные результаты, чем C base64 закодировать

[237, 217, 204, 218, 109, 227, 157, 145, 35, 152, 85, 142, 182, 180, 120, 8] 

Использование Java библиотеки org.apache.commons.codec.binary.Base64.encodeBase64 и org.bouncycastle.util.encoders.Base64.encode это результаты:

[55, 100, 110, 77, 50, 109, 51, 106, 110, 90, 69, 106, 109, 70, 87, 79, 116, 114, 82, 52, 67, 65, 61, 61] 

(обратите внимание на двойную '=' заполняющий символ в конце)

Использование base64.c Copyright (c) 1995-2001 Kungliga Tekniska Högskolan (Royal Institute of Technology, Stockholm, Sweden) это выход:

[55, 100, 110, 77, 50, 109, 51, 106, 110, 90, 69, 106, 109, 70, 87, 79, 116, 114, 82, 52, 67, 66, 72, 114] 

Может ли кто-нибудь объяснить, почему? Как я могу заставить библиотеку Java/C работать одинаково?

+0

Я бы прочитал base64 как текст, так как это точка его использования;) Кажется, вы получаете разные дополнения в конце. Вы знаете, что это проблема. Base64 не является четко определенными спецификациями. –

+1

Примечание: код C составляет 13 лет, возможно, есть более новая версия. –

ответ

0

Base64 работает с блоками по 3 байта, а заполнение = должно содержать размер вывода до кратного 3. Это дополнение является необязательным, и если его нет, вы можете просто добавить его вручную, проверив длина массива перед попыткой декодирования с использованием кода Java.

1

Каждый символ Base64 ASCII хранит информацию о битах (2 = 64), поэтому 4 символа Base64 содержат 3 байта информации. У вас есть 16 байт, поэтому один байт остается в конце, ему нужно 2 символа Base64, а для группы до 4 символов добавляются два дополнения: =.

Ум: с JavaSE 8 появился класс Base64, чтобы заменить несколько старых классов.

Base64 имеет несколько областей применения, с различными небольшими изменениями: заполнение может быть опущено, разрывы строк добавлены для ограничения длины линии и т. Д. Базовая платформа Java 8 даже имеет возможность для несовместимого URL-адреса и файла safeversion, где заменяются + и /.

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