从解密的字符串

时间:2016-09-29 12:14:43

标签: xml vb.net encryption

我正在编写一个Vb.Net应用程序,它从PHP服务器读取加密的XML文件。我正在使用此处找到的代码段:

PHP Encryption & VB.net Decryption

特别是Richard Varno的回答和代码。我可以将PHP服务器上的原始XML文件与VB.Net上的解密版本进行比较,它们是相同的。

问题在于,当我将解密后的版本加载到Vb.Net中的XML文档中时,我只得到一个空文档。

如果我从PHP服务器加载未加密的版本,那很好。除了已经加密然后解密之外,我看不出两者之间有任何明显的区别。两者都是字符串,两者都是Gzip所以为什么这不起作用?

这是我在未加密的字符串中读取的代码:

Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(lookupUrl)

' Tell the server that we want it compressed
request.AutomaticDecompression = DecompressionMethods.GZip
request.Timeout = 3000 ' Set 3 second timeout

' Parse the contents from the response to a stream object
stream = response.GetResponseStream()

' Create a reader for the stream object
Dim reader As New StreamReader(stream)

' Read from the stream object using the reader, put the encrypted contents in a string
Dim contents As String = reader.ReadToEnd()
' Put de-encrypted contents into another string
Dim decrypted As String = ""

' Create a new, empty XML document
Dim document As New System.Xml.XmlDocument()
Console.WriteLine("Received: " & contents)

' De-encrypt the data from the response from the server
decrypted = DecryptRJ256(Globals.sKy, Globals.sIV, contents)
Console.WriteLine("Decrypted: " & decrypted)

' Load the contents into the XML document
document.LoadXml(contents)

Dim nodes As XmlNodeList =     document.DocumentElement.SelectNodes("//results/Node1")

现在上面有效,但如果我更换

document.LoadXml(contents)

使用:

document.LoadXml(decrypted)

我的XML文档是空的。

1 个答案:

答案 0 :(得分:1)

事实证明,解密函数用空字符填充解密字符串的末尾。当被视为十六进制时,它们显示为00,但我通过console.writeline输出的信息根本没有显示。

空字符不是有效的XML,这就是为什么我没有得到任何输出。

解决方案是编写一个函数,该函数使用解密的字符串并使用(在我的情况下在.Net 4.0中)剥离它们的XmlConvert.IsXmlChar(ch)函数。

一旦删除了空字符,我就得到了预期的解密输出。