2013-11-28 38 views
0

在vb.net和2.0 Framework中開發了一箇舊的Web應用程序。該應用程序讀取存儲在Windows註冊表中的sql server名稱的加密信息。當談到這行代碼TripleDes加密/解密字符串有問號

ConnectionStr = Encoding.ASCII.GetString(plainText) 

我接收字符串

「P ?? ARSMEYVDE02」

內的問號,它應該是

「PLWARSMEYVDE02」

我試圖將編碼更改爲UTF8,默認或Unicode,但沒有運氣。這裏的功能

Public Function HostLogOnParameters() As Boolean 
Try 
    Dim rk As RegistryKey = Registry.LocalMachine.OpenSubKey(ConfigurationSettings.AppSettings("Registry.LocalMachine") & "Host", False) 
    Dim ConnectionStr As String = rk.GetValue("1") 
    Dim initVector As String = rk.GetValue("2") 
    Dim strKey As String = rk.GetValue("3") 
    Dim dec As New Decryptor 
    dec.Decryptor(EncryptTransformer.EncryptionAlgorithm.TripleDes) 
    dec.IV = Convert.FromBase64String(initVector) 
    'Decrypt the string 
    Dim plainText As Byte() = dec.Decrypt(Convert.FromBase64String(ConnectionStr), Convert.FromBase64String(strKey)) 
    ConnectionStr = Encoding.ASCII.GetString(plainText) 
    ConnectionStr = ConnectionStr.Substring(1) 
    mstrServer = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    ConnectionStr = ConnectionStr.Substring(mstrServer.Length + 3) 
    mstrDatabase = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    ConnectionStr = ConnectionStr.Substring(mstrDatabase.Length + 3) 
    mstrUser = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    ConnectionStr = ConnectionStr.Substring(mstrUser.Length + 3) 
    mstrPassvord = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    Return True 
Catch ex As Exception 
    Return False 
End Try 
End Function 

從plainText作爲十六進制的輸出。

2750CCD74152534D45595644455630325C44455656533032272C2745594372797374616C486F73744244272C274372797374616C486F737455736572272C273132337265706F7274696E6721402327

+0

@owlstead,不知道我是否理解。你想我打印出這行結果Dim plainText As Byte()= dec.Decrypt(Convert.FromBase64String(ConnectionStr),Convert.FromBase64String(strKey))? – jambis

+1

是的,正是這樣,[轉換爲十六進制](http://social.msdn.microsoft.com/Forums/vstudio/en-US/fa53ce74-fd53-4d2a-bc05-619fb9d32481/convert-byte-array-to- hex-string?forum = vbgeneral)當然,我的大腦在處理'20'而不是'0010 0000'或簡單的「」字符方面更好。 –

+0

@owlstead,我在主帖中添加了輸出。 – jambis

回答

0

這也可能是在拉丁美洲(ISO 8859-1),因爲它然後讀取PÌ×ARSMEYVDEV02\DEVVS02,和皮克斯是,如果當然一個衆所周知的公司。請注意,Windows-1252是此字符編碼的超集。

+0

這是否解決你的問題,贊比亞?如果你認爲它沒有,你可以嘗試其他字符編碼。 –

+0

對不起,我完全忘記了這一點。不,它不能解決我的問題。我嘗試了你的建議,但每次我都會弄髒閱讀。這是一個即將退役的舊應用程序,它是一個測試環境,所以我將連接字符串移到了web.config文件中。但無論如何感謝您的幫助! – jambis

+0

@jambis好吧,可惜這不是解決方案,您很快被棄用的應用程序可能會丟失或破壞數據。所有更多的理由去沉沒它。如果您認爲這個問題對其他人沒有用處,您可以刪除該問題(否則它將保持未答覆狀態)。 –