2016-11-02 6 views
0

私はサービスを使用するためにgSOAPを使用していますが、私は基本的な認証文字列を2つの異なる文字列にエンコードしています.1つはLinux 32ビットから、もう1つはAS400からです。 コードは同じです。 これはEBCDICを使ったAS400かもしれませんが、私はそれをASCIIに変換しており、同じ結果が得られます。 誰かに同じ問題があったのですか?DebianとAS400が異なるbase64エンコード文字列を与える理由

これは、Linuxのエンコードされた文字列である:

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'; 

のLinuxからコード:これは、符号化コードである

ooGVo4GVhIWZg5aVoqSUhZl6h4WZopaB8g== 

:これはAS400エンコードされた文字列である

c2FudGFuZGVyY29uc3VtZXI6Z2Vyc29hMg== 

システムは正常に動作しています。 AS400からは機能しません。 AS400のエンコーディングに問題があると思いますが、AS400システムへのアクセスが制限されているため、トレースできません。

+2

あなたの質問には、ソースコードと、入力データと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文字列

は、次のバイトです。

関連する問題