Как объединить строки с символом новой строки в RPGLE? - PullRequest
1 голос
/ 01 апреля 2019

Для API отдыха мне нужно объединить строки, разделенные символом новой строки. Эта строка используется для расчета HMAC.

Я уже пробовал разные шестнадцатеричные значения в качестве разделителя, например x'25 'x'13' x'10 ', но ничего не дало ожидаемого HMAC.

// working PHP example

//

// variables

$method = "POST";

$uri = "https://www.real.de/api/v1/units/";  

$body = "";

$timestamp = 1411055926;

$secretKey = "a7d0cb1da1ddbc86c96ee5fedd341b7d8ebfbb2f5c83cfe0909f4e57f05dd403";

// 

function signRequest($method, $uri, $body, $timestamp, $secretKey)
{

$string = implode("\n", [ $method, $uri, $body, $timestamp, ]);

return hash_hmac('sha256', $string, $secretKey);

}

// expected HMAC 

// 75312eabe66e4b9e74552a5e8959456d69cfa52a7cae9049093aede4bcdf71e7

// code RPGLE

yLf = x'25';

yString = %trim(yMethod)
+ yLf
+ %trim(yUrl)
+ yLf
+ %trim(yBody)
+ yLf
+ %trim(yTima);

// the string and the secret key then are converted to ASCII 

// the HMAC is calculated by the API 'Qc3CalculateHMAC'

Сгенерированный HMAC с помощью RPGLE не соответствует ожидаемому HMAC. При тестировании со строкой без символа новой строки все работает нормально.

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

В ответ на ваш вопрос ...

Предполагается, что вы работаете в английской системе, EBCDIC CCSID 37, затем вы хотите использовать и EBCDIC x'0d' для возврата каретки и x'25' для строкиfeed.

Эти значения будут переведены в ASCII CR x'0d' и LF x'0a' соответственно.

Но, похоже, вы уже используете правильное шестнадцатеричное значение.

Как вы конвертируете в ASCII?API iconv () - лучший выбор ...

Предполагая, что вы используете поддерживаемую версию IBM i ... вы можете воспользоваться преимуществами улучшенной поддержки CCSID в RPG для неявного преобразования EBCDIC.строки ...

dcl-s var1 char(100) ccsid(*utf8); // special value *UTF8 = CCSID 1208
dcl-s var2 char(100) ccsid(00367); // ANSI X3.4 ASCII standard; USA
dcl-s var3 char(100) ccsid(00437); // PC Data; PC Base; USA

Также зависит от того, что вы используете для отправки HTTP-запроса.

0 голосов
/ 25 апреля 2019

Еще не нашли решения в RPG, я в качестве обходного пути вызываю PHP-скрипт из RPG.

0 голосов
/ 02 апреля 2019

'\ n' - символ новой строки, x'15 '.

...