【问题标题】:TripleDes encrypted/decrypted string has question marksTripleDes 加密/解密字符串有问号
【发布时间】: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


【解决方案1】:

它可能是拉丁文 (ISO 8859-1),因为它随后显示为 PÌ×ARSMEYVDEV02\DEVVS02,而皮克斯当然是一家知名公司。请注意,Windows-1252 是这种字符编码的超集。

【讨论】:

  • 这能解决你的问题吗,詹比斯?如果您认为不是,您可以尝试其他字符编码。
  • 对不起,我完全忘记了这件事。不,它不能解决我的问题。我试过你的建议,但每次我读得很脏。那是一个即将退役的旧应用程序,它是一个测试环境,所以我将连接字符串移动到 web.config 文件中。但无论如何,谢谢你的帮助!
  • @jambis 好的,很遗憾这不是解决方案,在这种情况下,您即将被弃用的应用程序可能会丢失或损坏数据。更有理由沉没它。如果您认为该问题对其他人没有用处,您可以删除该问题(否则它将一直无人回答)。
猜你喜欢
  • 2012-12-12
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2015-12-12
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多