2

私はDOMDocumentVB6(MSXML)のオブジェクトを使用して、暗号化された文字列を含むXMLファイルを作成および保存してきました。ただし、この文字列には特定の特殊文字が含まれていると思います...

<EncryptedPassword>ÆÔ¤ïÎ
    ߯8KHÖN›¢)Þ,qiãÔÙ</EncryptedPassword>

これで、C#プロジェクトに移動し、このXMLファイルをUTF-8エンコーディングで逆シリアル化すると、この文字列で失敗します。ASCIIを介したシリアル化を試しましたが、これによりさらに数文字が取得されますが、それでも失敗します。この場所にプレーンテキストの文字列を入れれば、すべて問題ありません。:(

最初に文字列をVB6からMD5タイプの文字列に変換し、.NETでMD5文字列をデコードしてから、特殊文字で実際の文字列を復号化する方がよいと思いますが、これをすべてコーディングするための追加の手順です。誰かがここで私のためにもっと良いアイデアを持っているかもしれないと期待していましたか?

前もって感謝します!

4

2 に答える 2

2

暗号化された文字列をASCII文字セットを使用するものにエンコードするのが最善の方法です。これを行う最も簡単な方法は、暗号化された文字列を取得してBase64にエンコードし、このエンコードされた値をXML要素に書き込むことです。

また、.netでは、XML要素の値を取得し、Base64と「voila」からデコードするだけで、入力された文字列が得られます。

.Netはbase64文字列を簡単にデコードできます。http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspxを参照してください。(このページでは、実際よりも少し複雑に見える場合があります)。

VB6はBase64エンコーディングをネイティブでサポートしていませんが、グーグルですばやくトロールすると、それを非常に簡単に実現する方法の例がいくつか表示されます。

http://www.vbforums.com/showthread.php?t=379072

http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

http://www.mcmillan.org.nz/Programming/post/Base64-Class.aspx

http://www.freevbcode.com/ShowCode.asp?ID=2038

于 2012-05-15T16:19:56.360 に答える
0

これらの文字をXMLファイルに保存するのは間違っていると結論付けました。VB6はこれを許可しますが、.NETは許可しません!したがって、このリンクに沿って文字列をBase64配列に変換しました:-

http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

これで、.NET側で、ファイルが逆シリアル化されてクラスに戻り、パスワードをバイト配列として格納します。次に、これを復号化する必要のある文字列に変換し直します。これにより、別の問題が発生するようです。

    string password = Encoding.UTF7.GetString(this.EncryptedPassword);

このエンコーディング変換を使用すると、文字列をほぼ正確に希望どおりに戻すことができますが、正しく変換されていない文字よりも小さい文字があります。次に、同僚が最終的な答えのあるスタックオーバーフローの投稿を見つけました!このタイプの変換では、VB6と.NETの間に不一致があります。代わりに次のことを行うとトリックが行われました:-

    string password = Encoding.GetEncoding(1252).GetString(this.EncryptedPassword);

すべての助けをありがとう、大いに感謝します。これに関する元の投稿は@ .Netユニコードの問題、vb6レガシーです

于 2012-05-16T08:30:48.167 に答える