2009-06-29 13 views
0

私はVB6で復号ルーチンを持っています。私は今、C#で同じ復号化が必要です。 復号化が必要な文字列はUnicodeなので、Encoding.Unicode.GetStringを使ってC#の入力を読み込みます。入力はVB6とまったく同じように見えます。.Net unicode problem、vb6 legacy

ループ内の最初の数文字が復号化されます。次に、私は違いに遭遇します... プログラムは、文字「〜」をVB6とは異なるインデックスで解析します。

私はVBでと.NETで以下を参照してください。デバッグ:
VB6〜=コード言って732

言うまでもなく152
のC#〜=コード、復号化が失敗します。私は上記の文字の152を取得する必要があります。

ここで何が間違っていますか?

よろしく、

ミシェル

答えて

1

は、あなたのVB6は、それが異なる文字コードで戻ってきている理由であるUnicodeを(私はWindowsの-1252コードページで推測すると思います)、読んでいませんでした。

+0

答えをいただきありがとうございます。 実際にはC#のコードページ1252で解読されたコードを読むのを忘れていました。 –

0

「文字152」はどういう意味ですか?その番号をどうやって取得しましたか?

「Unicodeで」ということは、さまざまな意味があることに注意してください。バイナリデータにUTF-16としてエンコードされていますか?ソースデータの詳細を投稿することができれば、非常に役に立ちます。

また、暗号化と復号化は、ほぼで、常にでなければなりません。従来の動作を再現する必要があると理解していますが、時間の経過とともに不透明なバイナリデータとして扱うことは避けてください。

+0

あなたは当然ですが、現時点で正常なシステムを作り出すように私の上司に説得することはできません。 (私はVB6でデバッグから152を得ました) –

0

私は以前これを行っています。問題はエンコーディングにあります。 .NETがUnicodeの場合、VB6はUnifailです。

.NET側では、文字列をバイト配列に変換するためにEncoding.ASCIIを使用する必要があります。逆もまた同様です。あなたはVBアプリに送信する暗号化されている場合

Encoding.ASCII.GetString(decrypted); 
//and 
Encoding.ASCII.GetBytes(cleartext); 

だから、あなたはASCII.GetBytesを使用する必要がありますし、そのバイト配列を暗号化し、そしてあなたはVB側からバイト配列を取得するとき、あなたは彼らと使用を復号化する必要がありますバイトを使用可能な文字列にデコードするには、ASCII.GetStringを使用します。

+0

これは確かに私のソリューションの一部です。しかし、私はASCIIの代わりにUnicodeを使用しました。私のcypherと暗号化されたテキストは基本64ではなく、ascii 128でさえありません。 –