0

我想知道如何通过 vb.net 代码加密电子邮件地址。

我发现一个样本不能很好地处理特殊字符,我收到了这个错误:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.

这是我正在尝试的代码:

  'The function used to encrypt the text
    Private Function Encrypt(ByVal strText As String, ByVal strEncrKey _
             As String) As String
        Dim byKey() As Byte = {}
        Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}

        Try
            byKey = System.Text.Encoding.UTF8.GetBytes(Left(strEncrKey, 8))

            Dim des As New DESCryptoServiceProvider()
            Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(strText)
            Dim ms As New MemoryStream()
            Dim cs As New CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write)
            cs.Write(inputByteArray, 0, inputByteArray.Length)
            cs.FlushFinalBlock()
            Return Convert.ToBase64String(ms.ToArray())

        Catch ex As Exception
            Return ex.Message
        End Try

    End Function

你们有什么感想?我究竟做错了什么?谢谢,拉齐尔

更新:全栈跟踪:

System.FormatException 被捕获 Message=输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非空白字符。Source=mscorlib StackTrace:在 D:\Website\Account\Login.aspx.vb:line 213 InnerException 中的 WEbsite.Login.Decrypt(String strText, String sDecrKey) 处的 System.Convert.FromBase64String(String s):

更新 2:

加密方式增加:

'用于解密文本的函数

  Private Function Decrypt(ByVal strText As String, ByVal sDecrKey _
               As String) As String
        Dim byKey() As Byte = {}
        Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
        Dim inputByteArray(strText.Length) As Byte

        Try
            byKey = System.Text.Encoding.UTF8.GetBytes(Left(sDecrKey, 8))
            Dim des As New DESCryptoServiceProvider()
            inputByteArray = Convert.FromBase64String(strText)
            Dim ms As New MemoryStream()
            Dim cs As New CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write)

            cs.Write(inputByteArray, 0, inputByteArray.Length)
            cs.FlushFinalBlock()
            Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8

            Return encoding.GetString(ms.ToArray())

        Catch ex As Exception
            Return ex.Message
        End Try

    End Function
4

2 回答 2

1

我已经尝试使用加密文本和相同的密钥作为输入进行解密。
它按预期工作。我对您的代码所做的唯一更改是使用 Substring 方法而不是 Left ,如

byKey = System.Text.Encoding.UTF8.GetBytes(strDecrKey.Substring(0, 8))

我以这种方式调用这两种方法:

Dim result as String = Encrypt("test@gmail.com", "ABCD9876") 
Dim decrypted = Decrypt(result, "ABCD9876")

我回来了“test@gmail.com”。
-Buon Weekend anche a te-

于 2012-09-21T22:40:47.250 回答
0

使用字符串生成器而不是字符串作为带有特殊字符的参数。

最好的祝福。

于 2012-09-24T18:33:47.880 回答