Java: Commons-codec и base64 декодирование не работают на сервере - PullRequest
1 голос
/ 04 марта 2011

Я сижу со странной проблемой. Я использую Apache Commons-Codec (версия 1.4). Следующий фрагмент кода работает правильно на моем ПК (java версия 1.6, Glassfish ver 2.1) в отдельном приложении и в EJB, но на моем сервере в EJB он работает неправильно (но в автономном приложении он работает правильно)

...
org.apache.commons.codec.binary.Base64 b64 = new org.apache.commons.codec.binary.Base64();
byte[] bytes = b64.decode(makeSignedBytes(strB64.getBytes("UTF-8")));
...
private byte[] makeSignedBytes(byte[] ubytes)
{
    byte[] sbytes = new byte[ubytes.length];
    for (int i = 0; i < ubytes.length; i++)
    {
        sbytes[i] = (byte)(0x000000FF & ((int) ubytes[i]));
    }
    return sbytes;
}

Строка ввода:

4-sDHXi_2Tu2a8k8NPs1FBT3t7UvN7CksUV6gfSE_Ks0aiCPbdeGM8qLdC58b2_hFH7lEp8m9cyPYQOTo4E0t66ZYP8n8tRhT87c8iD34pCd80qvP9vIXsNsodRaGzK5

Массив выходных байтов должен выглядеть следующим образом (я напечатал его в шестнадцатеричном виде):

|E3|EB|03|1D|78|BF|D9|3B|B6|6B|C9|3C|34|FB|35|14|14|F7|B7|B5|2F|37|B0|A4|B1|45|7A|81|F4|84|FC|AB|34|6A|20|8F|6D|D7|86|33|CA|8B|74|2E|7C|6F|6F|E1|14|7E|E5|12|9F|26|F5|CC|8F|61|03|93|A3|81|34|B7|AE|99|60|FF|27|F2|D4|61|4F|CE|DC|F2|20|F7|E2|90|9D|F3|4A|AF|3F|DB|C8|5E|C3|6C|A1|D4|5A|1B|32|B9|

96 байт, если сервер ошибается, это всего 93 байта и выглядит так:

|E2|C0|C7|5E|2D|93|BB|66|BC|93|C3|4F|B3|51|41|4F|7B|7B|52|F3|7B|0A|4B|14|57|A8|1F|48|42|AC|D1|A8|82|3D|B7|5E|18|CF|2A|2D|D0|B9|F1|BD|A1|14|7E|E5|12|9F|26|F5|CC|8F|61|03|93|A3|81|34|B7|AE|99|60|FF|27|F2|D4|61|4F|CE|DC|F2|20|F7|E2|90|9D|F3|4A|AF|3F|DB|C8|5E|C3|6C|A1|D4|5A|1B|32|B9|

Понятия не имею, почему он работает на моем компьютере, а не на сервере: (

1 Ответ

1 голос
/ 04 марта 2011

Неправильный результат вызван заменой второго символа во входной строке (U+002D HYPHEN-MINUS) на U+2010 HYPHEN и заменой подчеркивания пробелами.Возможно, это результат передачи входной строки через какой-то «умный» текстовый редактор.Таким образом, на самом деле похоже, что вы передали неверную входную строку.

Другие недостатки в вашем коде:

  • makeSignedBytes() метод не имеет смысла и не нужен
  • strB64.getBytes("UTF-8") семантически неверен, должно быть strB64.getBytes("ASCII")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...