0

私はVB6で復号化ルーチンを持っています。C#で同じ復号化が必要になりました。復号化が必要な文字列は Unicode であるため、Encoding.Unicode.GetString を使用して C# で入力を読み取ります。入力は、VB6 とまったく同じに見えるようになりました。

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

デバッグすると、VB と .Net で次のように表示されます。
VB6 ~ = コード 152
C# ~ = コード 732

言うまでもなく、復号化は失敗します。上記のキャラクターには 152 を取得する必要があります。

ここで何が問題なのですか?

よろしく、

ミシェル

4

3 に答える 3

1

あなたの VB6 は Unicode を読み取っていませんでした (Windows-1252 コードページだと思います)。これが、別の文字コードで戻ってきた理由です。

于 2009-06-29T13:27:13.737 に答える
0

「キャラクター152」とは正確には何を意味しますか?どうやってその番号を手に入れたのですか?

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

また、暗号化と復号化は、ほとんどの場合、文字ではなくバイトを使用して行う必要があります。従来の動作を再現する必要があることは理解していますが、時間の経過とともに、文字列を不透明なバイナリ データとして扱うことから移行するようにしてください。

于 2009-06-29T13:27:55.593 に答える
0

私は前にこれをやったことがあります。問題はエンコーディングにあります。.NET は Unicode で、VB6 は Unifail です。

.NET 側では、Encoding.ASCII を使用して、文字列をバイト配列に変換したり、その逆を行う必要があります。

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

したがって、暗号化して VB アプリに送信する場合は、ASCII.GetBytes を使用してからそのバイト配列を暗号化する必要があります。また、VB 側からバイト配列を取得する場合は、それらを復号化し、ASCII.GetString を使用してバイトをデコードする必要があります。使用可能な文字列に。

于 2009-06-29T13:33:38.000 に答える