【发布时间】:2017-08-22 10:25:19
【问题描述】:
我已经在这个答案中实现了 encrypt 和 decrypt 字符串
的方法对于大多数字符串来说,这似乎可以很好地加密和解密,直到字符串有两个或更多空格。
即
- 'Buzz' - 加密/解密很好(缓冲区/长度 = 16)
- 'Buzz Aldrin' - 加密/解密很好(缓冲区/长度 = 16)
- 'Buzz Aldrin Astronaut' - 加密正常/解密错误(缓冲区/长度 = 31)
System.Security.Cryptography.CryptographicException: '要解密的数据长度无效。'
Public Shared Function AES_Decrypt(ByVal ciphertext As String, ByVal key As String) As String
Dim AES As New System.Security.Cryptography.RijndaelManaged
Dim SHA256 As New System.Security.Cryptography.SHA256Cng
Dim plaintext As String = ""
Dim iv As String = ""
Try
Dim ivct = ciphertext.Split(CChar("="))
iv = ivct(0) & "=="
ciphertext = ivct(2) & "=="
AES.Key = SHA256.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key))
AES.IV = Convert.FromBase64String(iv)
AES.Mode = Security.Cryptography.CipherMode.CBC
Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
Dim Buffer As Byte() = Convert.FromBase64String(ciphertext)
Exception ----> plaintext = System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
Return plaintext
Catch ex As system.Exception
Return ex.Message
End Try
End Function
任何想法我做错了什么或我可以如何纠正它?
示例更新
Try
Dim s1, s2, s3 As String
s1 = Crypto.AES_Encrypt("Buzz", "Password")
s2 = Crypto.AES_Encrypt("Buzz Aldrin", "Password")
s3 = Crypto.AES_Encrypt("Buzz Aldrin Astronaut", "Password")
Debug.Print("Buzz : " & s1 & " : " & Crypto.AES_Decrypt(s1, "Password"))
Debug.Print("Buzz Aldrin : " & s2 & " : " & Crypto.AES_Decrypt(s2, "Password"))
Debug.Print("Buzz Aldrin Astronaut : " & s3 & " : " & Crypto.AES_Decrypt(s3, "Password"))
Catch ex As System.Exception
Debug.Print(ex.Message.ToString())
End Try
Debug.Print 输出
嗡嗡声:aTBh1U0OFqW7+266LiC7Vg==GC6bUY5pK10L2KgQzpAtgg==:嗡嗡声
巴兹奥尔德林:80fmD0z57R8jmmCkKhCsXg==dixi7bqheBzKhXcT1UEpWQ==:巴兹奥尔德林
抛出异常:mscorlib.dll 中的“System.Security.Cryptography.CryptographicException”
要解密的数据长度无效。
【问题讨论】:
-
我添加了一个例子
-
注意密码应该是散列的,不加密
-
对不起我的坏^_^我对Base64了解不多
标签: vb.net encryption