【发布时间】:2012-09-21 18:52:13
【问题描述】:
我想知道如何通过 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
你们怎么看?我究竟做错了什么? 谢谢,Laziale
更新:完整堆栈跟踪:
System.FormatException 被捕获 Message=输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、两个以上的填充字符或填充字符中的非空白字符。 源=mscorlib 堆栈跟踪: 在 System.Convert.FromBase64String(String s) 在 D:\Website\Account\Login.aspx.vb:line 213 中的 WEBsite.Login.Decrypt(String strText, String sDecrKey) 内部异常:
更新 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
【问题讨论】:
-
你能发布完整的堆栈跟踪吗?
-
@OScar 完整堆栈跟踪已发布。谢谢
-
@Steve 谢谢你,我更新了我的问题。
-
@Steve 对不起,我的错 :) 星期五....
-
我已经尝试使用加密文本和相同的密钥作为输入进行解密。它按预期工作。我对您的代码所做的唯一更改是使用 Substring 方法而不是
GetBytes(strDecrKey.Substring(0, 8))中的 Left。我这样调用这两种方法:Dim result as String = Encrypt("test@gmail.com", "ABCD9876")和Dim decrypted = Decrypt(result, "ABCD9876")。我回来了“test@gmail.com”。
标签: vb.net visual-studio-2010 encryption