-1

我遇到问题,当我尝试解密消息时提示我该错误..以下是我的代码..

Private Sub btndecrypt_Click(sender As Object, e As EventArgs) Handles btndecrypt.Click
    Dim key As Integer = Integer.Parse(txtkey.Text) << THIS CODE GIVE ERROR**'input string was not in the correct format**

    decrypt(key)
    Txtmessage.Text = totaldecry

End Sub

Private Sub decrypt(ByVal key As Integer)
    Dim length As Integer

    length = Len(receivemsg)
    ReDim y(length)
    Dim chararray() As Char = receivemsg.ToCharArray
    For a As Integer = 0 To length - 1
        y(a) = Asc(chararray(a)) - key
    Next

    For a As Integer = 0 To length - 1
        totaldecry = totaldecry & Chr(y(a)).ToString 
    Next


End Sub
4

3 回答 3

0

很简单:文本框不包含可以转换为整数值的文本。如果我在你的文本框中输入我的名字,你希望如何从中得到一个整数?您需要能够处理不良输入。捕获异常或使用 TryParse() 而不是 Parse() 函数。你想如何处理失败取决于你。

当我们在做的时候,我希望你没有用那个“解密”代码做任何真正的事情......那里根本没有真正的安全性。

但如果你必须,我会这样写解密函数:

Private Function decrypt(ByVal key As Integer, ByVal message As String) As String
    Return New String(message.Select(Function(c) Chr(Asc(c)-key)).ToArray())  
End Function

就一个单行。这就是加密的“安全性”。您可以像这样使用该功能:

Private Sub btndecrypt_Click(sender As Object, e As EventArgs) Handles btndecrypt.Click
    Try
        Txtmessage.Text = decrypt(Integer.Parse(txtkey.Text), receivemsg)
    Catch
        'do something here to let user know it's a bad key
    End Try
End Sub

另请注意,我更改了您的函数定义,以减少对全局变量和类级变量在函数之间传递信息的依赖。那只是更好的风格。

于 2012-12-15T06:37:43.073 回答
0

Integer.Parse() 函数直接转换值。如果参数不是整数,它不会测试实际值并引发错误。

所以你可以使用 integer.TryParse 如下。if Integer.TryParse(txtkey.Text,key) then '成功转换整数,并将值存储在 key. else 'txtkey.Text 没有任何有效的整数。所以 0 存储在 key 中。万一

最好创建一个具有所有数据类型转换函数的类,并在需要时从该类中调用该函数。我创建了以下类以在我的代码中使用

--------------------------我的代码中的类-------------------- ----------------

Public Class NullValue
    '''''''''''''''''' 1. BYTE type convertion
    Public Shared Function getByte(ByVal mValue As String) As Byte
        Dim mNumber As Byte
        If Byte.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function

    '''''''''''''''''' 2. Int16/Short Integer type convertion
    Public Shared Function getInt16(ByVal mValue As String) As Int16
        Dim mNumber As Int16
        If Int16.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function

    '''''''''''''''''' 3. Int32/Integer type convertion
    Public Shared Function getInteger(ByVal mValue As String) As Int32
        Dim mNumber As Int32
        If Int32.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function

    '''''''''''''''''' 4. Int64/Long Integer type convertion
    Public Shared Function getInt64(ByVal mValue As String) As Int64
        Dim mNumber As Int64
        If Int64.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function

    '''''''''''''''''' 5. Single type convertion
    Public Shared Function getSingle(ByVal mValue As String) As Single
        Dim mNumber As Single
        If Single.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function

    '''''''''''''''''' 6. Double type convertion
    Public Shared Function getDouble(ByVal mValue As String) As Double
        Dim mNumber As Double
        If Double.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function


    '''''''''''''''''' 8. Integer(Int32 type convertion
    Public Shared Function getInt32(ByVal mValue As String) As Integer
        Dim mNumber As Int32
        If Int32.TryParse(mValue, mNumber) Then Return mNumber Else Return 0
    End Function

    '''''''''''''''''' 9. Short Date type convertion to String '''in Regional format
    Public Shared Function getDateString(ByVal mValue As String) As String
        Dim mDate As Date, strDate As String = ""
        If Date.TryParse(mValue, mDate) Then
            strDate = Format(mDate, "dd/MM/yyyy")
        Else
            strDate = ""
        End If
        Return strDate
    End Function

    '''''''''''''''''' 10. Short Date type convertion
    Public Shared Function getDate(ByVal mValue As String) As Date
        Dim mDate As Date
        Try
            Date.TryParse(mValue, mDate)
        Catch ex As Exception
            mDate = Date.MinValue
        End Try
        Return mDate
    End Function

    '''''''''''''''''' 11. Short Date type convertion
    Public Shared Function getDateTime(ByVal mValue As String) As DateTime
        Dim mDate As DateTime
        Try
            Date.TryParse(mValue, mDate)
        Catch ex As Exception
            mDate = Date.MinValue
        End Try
        Return mDate
    End Function

    '''''''''''''''''' 12. Short Date type convertion
    Public Shared Function getBoolean(ByVal mValue As String) As Boolean
        Dim mBool As Boolean
        If Boolean.TryParse(mValue, mBool) Then Return mBool Else Return False
    End Function

    '''''''''''''''''' 11. Time Convertion
    Public Shared Function getTime(ByVal mValue As String) As String
        Dim mDate As DateTime, mTime As String = ""
        Try
            mDate = Convert.ToDateTime(mValue)
            If mDate.Year > 1950 Then mTime = mDate.ToShortTimeString
        Catch ex As Exception
        End Try
        Return mTime
    End Function
End Class
于 2012-12-15T13:22:39.617 回答
0

这是一个链接,您可能会检查它,希望它可以让您对您的任务有所了解:)使用 VB.NET 加密和解密密码

于 2012-12-15T06:51:26.110 回答