質問

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

ループの最初の数文字を[OK]を復号化されます!それから私は違いが発生しました... プログラムは、VB6とは異なるインデックスを持つ文字「〜」を解析します。

私はVBでと.NETで、次を参照してくださいデバッグする場合:
VB6〜=コード152
C#〜=コード732

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

ここで何が悪いのでしょうか?

よろしく、

ミシェル

役に立ちましたか?

解決

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

他のヒント

あなたはまさに「文字152」とはどういう意味ですか?どのようにして、その番号を取得したのですか?

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

また、暗号化と復号化は、ほぼは常にはバイトではなく文字を使用して行われるべきです。私はあなたが従来の動作を再現する必要があります理解しますが、あなたは時間をかけて、不透明なバイナリデータとして文字列を処理することから離れて移行しようとする必要があります。

私は前にこれをやりました。問題は、あなたのエンコーディングです。 .NETはユニコードである場合には、VB6はUnifailです。

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top