【问题标题】:Variable Preventing More Text Being Appended To String?防止更多文本附加到字符串的变量?
【发布时间】:2014-08-04 16:05:45
【问题描述】:

我现在很迷茫,为什么我不能得到这么简单的工作!

我正在解密一个值并将其附加到一个字符串,例如

 MessageBox.Show("TEST 1: " & DecryptedValue & " WHY AM I BEING STRIPPED???")

问题是,从字符串中剥离 DecryptedValue 之后的任何内容。

下面是一个完整的项目/表单示例,显示了此问题的发生:

Imports System.Text
Imports System.Security.Cryptography
Imports System.IO

Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim DecryptedValue As String = Decrypt("mDnz8JVmfUyYxkgZYYiFbw==", "IXZOfRxCtb4pQcu2")
        MessageBox.Show("TEST 1: " & DecryptedValue & " WHY AM I BEING STRIPPED???")

        Dim sw As New StringWriter
        sw.Write("TEST 2 ")
        sw.Write(DecryptedValue)
        sw.Write("WHY AM I BEING STRIPPED???")
        MessageBox.Show(sw.ToString())

        Dim okstr As String = "Ok"
        MessageBox.Show("When Anything " & "Else " & "Works " & okstr)
    End Sub

    Friend Function Decrypt(ByVal str As String, ByVal key As String) As String
        Dim cipher As Byte() = Convert.FromBase64String(str)
        Dim btKey As Byte() = Encoding.ASCII.GetBytes(key)
        Dim decryptor As ICryptoTransform = New RijndaelManaged() With { _
            .Mode = CipherMode.ECB, _
            .Padding = PaddingMode.None _
        }.CreateDecryptor(btKey, Nothing)
        Dim ms As New MemoryStream(cipher)
        Dim cs As New CryptoStream(ms, decryptor, CryptoStreamMode.Read)
        Dim plain As Byte() = New Byte(cipher.Length - 1) {}
        Dim count As Integer = cs.Read(plain, 0, plain.Length)
        ms.Close()
        cs.Close()
        Return Encoding.UTF8.GetString(plain, 0, count)
    End Function

End Class

过去有没有人遇到过这个问题/可以发现我正在查看的一些非常基本的东西?

【问题讨论】:

  • 你检查过解密字符串末尾的空字符吗?
  • 是文本被解密了吗?检查返回的字符串是否包含字符串终止字符 Chr(0)。
  • @ Plutonix - 点到为止,非常感谢,作为答案发布我会接受的:)
  • 咳咳。你好! 。我也发现了!
  • 抱歉,Grim,出于某种原因,我只能看到部分答案……但现在一切正常。也非常感谢您的帮助:)

标签: vb.net cryptography rijndaelmanaged stringwriter


【解决方案1】:

如果解密的返回包含 Null (Chr(0)),则不会“看到”附加的文本。这是因为 Chr(0)/Null 是字符串终止字符。

Dim sb As New StringBuilder

sb.Append("first part of string" & Convert.ToChar(0))
sb.Append("this is added")

Console.WriteLine(sb.ToString)
Console.WriteLine(sb.ToString.Length)

只会显示第一部分,但长度会报告 34,其中还包括嵌入的 Null。创建的字符串实际上是 34 个字符长,但大多数内容都在 Chr(0) 处停止。

控制台甚至看不到在整个字符串之后发送的换行符,因此显示为:

first part of string34

有关其工作原理/原因的更多信息,请参阅this answer

【讨论】:

    猜你喜欢
    • 2016-07-14
    • 2018-06-24
    • 2010-11-20
    • 2014-02-19
    • 2014-02-25
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多