2016-11-02 4 views
0

서비스를 사용하기 위해 gSOAP를 사용하고 있으며, 다른 인증 문자열을 두 개의 다른 문자열 (하나는 Linux 32 비트, 다른 하나는 AS400)로 인코딩했습니다. 코드는 동일합니다. EBCDIC을 사용하는 AS400 일 수도 있지만 ASCII로 변환하면 같은 결과가됩니다. 누군가가 똑같은 문제가 있었습니까? 리눅스에서데비안과 AS400이 다른 base64로 인코딩 된 문자열을 제공하는 이유는 무엇입니까?

if (!t) 
    t = (char*)soap_malloc(soap, output_length /*(n + 2)/3 * 
               * 4 + 1 */); 
if (!t) 
    return NULL; 

p = t; 

for (int i = 0, j = 0; i < input_length;) { 

    uint32_t octet_a = i < input_length ? (unsigned char)s[i++] : 0; 
    uint32_t octet_b = i < input_length ? (unsigned char)s[i++] : 0; 
    uint32_t octet_c = i < input_length ? (unsigned char)s[i++] : 0; 

    uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c; 

    t[j++] = encoding_table[(triple >> 3 * 6) & 0x3F]; 
    t[j++] = encoding_table[(triple >> 2 * 6) & 0x3F]; 
    t[j++] = encoding_table[(triple >> 1 * 6) & 0x3F]; 
    t[j++] = encoding_table[(triple >> 0 * 6) & 0x3F]; 
} 

for (int i = 0; i < mod_table[input_length % 3]; i++) 
    t[output_length - 1 - i] = '='; 

t[output_length - mod_table[input_length % 3] + 2] = '\0'; 

코드 :

ooGVo4GVhIWZg5aVoqSUhZl6h4WZopaB8g== 

이 인코딩 코드이고 :이 AS400 코드 스트링 인

c2FudGFuZGVyY29uc3VtZXI6Z2Vyc29hMg== 

:

리눅스 문자열 인코딩 시스템이 잘 작동합니다. AS400에서 작동하지 않습니다. AS400 인코딩 문제가있는 것 같지만 AS400 시스템에 대한 액세스가 제한되어 있으므로 추적 할 수 없습니다.

+2

질문에 소스 코드, 입력 데이터 및 인코딩 된 두 개의 결과 문자열이 표시되어야합니다. 그러니 ** 그것을 향상시키고 (그리고 동기를 부여하기 위해) ** 귀하의 질문을 편집하십시오 ** –

답변

4

EBCDIC로 인코딩 된 텍스트를 나타내는 바이트 시퀀스를 변환 중이기 때문입니다. santanderconsumer:gersoa2로 ASCII에서 디코딩

115,97,110,116,97,110,100,101,114,99,111,110,115,117,109,101,114,58,103,101,114,115,111,97,50 

:

첫 번째 문자열은 다음 바이트입니다. 그 암호를 지금 변경해야 할 것입니다. 우리는이 같은 문자열입니다 것을 볼 수 있습니다 https://en.wikipedia.org/wiki/EBCDIC에서 EBCDIC 테이블을 확인

162,129,149,163,129,149,132,133,153,131,150,149,162,164,148,133,153,122,135,133,153,162,150,129,242 

:

두 번째 Base64로 문자열

는 다음 바이트입니다.

관련 문제