在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
@owlstead,不知道我是否理解。你想我打印出這行結果Dim plainText As Byte()= dec.Decrypt(Convert.FromBase64String(ConnectionStr),Convert.FromBase64String(strKey))? – jambis
是的,正是這樣,[轉換爲十六進制](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'或簡單的「」字符方面更好。 –
@owlstead,我在主帖中添加了輸出。 – jambis