【发布时间】:2013-11-28 19:13:09
【问题描述】:
在 vb.net 和 2.0 框架中开发了一个旧的 Web 应用程序。该应用程序读取存储在 Windows 注册表中的 sql 服务器名称的加密信息。说到这行代码
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
纯文本的十六进制输出。
2750CCD74152534D45595644455630325C44455656533032272C2745594372797374616C486F73744244272C274372797374616C486F737455736572272C273132337265706F7274696E6721402327 P>
【问题讨论】:
-
@owlstead,不确定我是否理解。你想让我打印出这一行的结果 Dim plainText As Byte() = dec.Decrypt(Convert.FromBase64String(ConnectionStr), Convert.FromBase64String(strKey)) 吗?
-
是的,就是这样,converted to hexadecimals 当然,我的大脑更擅长处理
20而不是0010 0000或简单的“”字符。 -
@owlstead,我在主帖中添加了输出。
标签: vb.net encryption encoding tripledes