首页 > 解决方案 > Visual Basic .Net 公共函数在执行前对单行过程进行解码

问题描述

我在尝试一些代码时遇到了函数和过程的问题,如下所示:

    Module mod1
        Class ExampleApp

            Dim textvalue as String = "dGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgdGV4dC4="
            Dim string1 as String = "Convert.FromBase64String(input)"

            Public Function DecodeB64(ByVal input As String) As String

                Return System.Text.Encoding.UTF8.GetString(string1)

            End Function

        End Class
    End Module

问题是,是否可以在执行之前在 Public Function 中对语句进行编码?

我见过一些他们在 PHP 脚本上实现它的案例,其中整个脚本在执行之前被编码。我已经尽力通过将“Convert.FromBase64String(input)”存储到字符串变量来应用相同的概念,但我遇到了这样的问题:

“字符串”类型的值无法转换为“字节的一维数组”

当我不应用这个概念时,base64 中的文本会被顺利解码。我的主要目标是尽可能地隐藏语句或语句组。此错误中的问题似乎是什么?

标签: vb.netbase64

解决方案


您在示例代码中有 2 个错误:

  • 首先,您应该知道Convert.FromBase64String()返回 Byte()数组,因此您不能将其分配给字符串变量/字段。

  • 其次,Encoding.GetString()需要Byte()数组作为参数,但是您将字符串传递给它,因此InvalidCastException发生了。

它们的正确用法应该是这样的:

Public Function DecodeB64(ByVal input As String) As String

    ' make sure the input string is Base64 formatted
    Dim bytearray As Byte() = Convert.FromBase64String(input)

    ' decoding from byte array
    Return System.Text.Encoding.UTF8.GetString(bytearray)

End Function

' usage
Dim textvalue as String = "dGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgdGV4dC4="
Dim result As String = DecodeB64(textvalue)

工作示例:.NET Fiddle 演示


推荐阅读