ColdFusion: целое число «0» не преобразуется в символ ASCII - PullRequest
1 голос
/ 25 октября 2010

У меня есть строка (состоящая из идентификатора пользователя и отметки даты / времени), которую я затем шифрую с помощью Encrypt ColdFusion (inputString, myKey, "Blowfish / ECB / PKCS5Padding", "Hex") ,

Для взаимодействия с 3d-партией мне необходимо выполнить следующее:

  1. Преобразовать каждую пару символов в результирующей строке в значение HEX.
  2. Значения HEX затем представляются как целые числа.
  3. Результирующие целые числа затем выводятся в виде символов ASCII.
  4. Все символы ASCII объединяются, образуя строку байтов.
  5. Затем строка байтов преобразуется вBase64.
  6. Base64 кодируется по URL и, наконец, отсылается (фу!)

Все работает без проблем, APART FROM, когда исходная строка cfEncrypted содержит "00".

HEX-значение 00 переводится как целое число (через функцию InputBaseN) 0, которое затем отказывается корректно преобразовать в символ ASCII!

Результирующая строка байтов (и, следовательно, строка URL-адреса) испорчена, и 3d-сторонане может расшифровать его.

Стоит отметить, что я заявляю:вверху страницы.

Есть ли способ правильно вывести 00 как ASCII?Могу ли я избежать использования «00» в исходной зашифрованной строке?Любая помощь будет принята с благодарностью:)

Ответы [ 2 ]

0 голосов
/ 17 марта 2013

На самом деле есть очень простое решение. Компания, обслуживающая кредитные карты, которая обрабатывает ваш запрос, нуждается в том, чтобы вы преобразовали его в строчные шестнадцатеричные буквы. Обрабатываются только символы:, -, 0-9 делают if if else и преобразуют их вручную в строку.

0 голосов
/ 25 октября 2010

Я почти уверен, что ColdFusion (и Java ниже) используют строковый тип с нулевым символом в конце.Это означает, что каждая строка содержит один и только один символ asc (0), который является ограничителем строки.Если вы пытаетесь вставить asc (0) в строку, CF вызывает ошибку, потому что вы пытаетесь создать искаженный строковый элемент.

Я не уверен, каково конечное решение.Я хотел бы поиграть с toBinary () и toString () и поговорить с вашим сторонним поставщиком об обходных путях, таких как отправка необработанных шестнадцатеричных значений или аналогичных.

...