2009-06-29 72 views
0

我在VB6中有一個解密例程。我現在想在C#中進行相同的解密。 需要解密的字符串是unicode,所以我使用Encoding.Unicode.GetString來讀取C#中的輸入。輸入現在看起來與VB6中的完全相同。.Net unicode問題,vb6傳統

循環中的前幾個字符被解密了!然後我遇到一個差異... 程序解析字符'〜'的索引與VB6中的索引不同。

當調試我看到在VB和NET中執行以下操作:
VB6〜=碼152
C#〜=代碼732

不用說,解密失敗。我需要爲上面提到的角色獲得152。

這裏有什麼問題?

問候,

米歇爾

回答

1

你VB6是不讀書的Unicode(我猜在Windows的代碼頁1252),這就是爲什麼它回來了不同的字符代碼。

+0

感謝您的回答,您是對的。 其實我忘了在C#中用codepage 1252讀取解密種子。 – 2009-06-29 13:39:09

0

究竟是什麼意思「字符152」?你是怎麼得到這個數字的?

請注意,「在Unicode中」可能意味着許多不同的事情。你確定它在二進制數據中被編碼爲UTF-16嗎?如果您可以發佈更多關於源數據的信息,那將會非常有幫助。

此外,加密和解密應該幾乎總是使用字節,而不是字符。雖然我知道您需要重現傳統行爲,但您應該嘗試從一段時間內將字符串視爲不透明的二進制數據。

+0

你是正確的,但我無法說服我的老闆目前創建一個合理的系統。 (我在VB6中調試了152個) – 2009-06-29 13:54:51

0

我以前做過這個。問題在於你的編碼。 .NET是unicode,VB6是Unifail。

在.NET方面,您需要使用Encoding.ASCII將字符串轉換爲字節數組,反之亦然。

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

所以,當你要加密發送到VB應用程序,您必須使用ASCII.GetBytes然後加密字節數組,當你從VB側的字節數組,您必須對它們進行解密和使用ASCII.GetString將字節解碼爲可用的字符串。

+0

請問,這確實是我解決方案的一部分。但是,我使用Unicode而不是ASCII。我的密碼和加密的文本不是64位的,甚至在ASCII 128位以下。 – 2009-06-29 13:51:38