vb.net 中的电子邮件地址加密
Posted
技术标签:
【中文标题】vb.net 中的电子邮件地址加密【英文标题】:Encryption of email address in vb.net 【发布时间】: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”。
【参考方案1】:
我已尝试使用加密文本和相同密钥作为输入解密。 它按预期工作。我对您的代码所做的唯一更改是使用 Substring 方法而不是
中的 LeftbyKey = 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-
【讨论】:
【参考方案2】:使用字符串生成器代替字符串作为带有特殊字符的参数。
最好的问候。
【讨论】:
以上是关于vb.net 中的电子邮件地址加密的主要内容,如果未能解决你的问题,请参考以下文章