我已經實現了在這個答案的方法加密和解密字符串System.Security.Cryptography.CryptographicException:'要解密的數據的長度無效。'字符串雙空格
這似乎是加密和解密對大多數串直到字符串中有兩個或兩個以上空間。
I.e.
- '巴茲' - 加密/解密細(緩衝液/長度= 16)
- '奧爾德林' - 加密/解密細(緩衝液/長度= 16)
- '奧爾德林宇航員' - 加密細/解密錯誤(緩衝器/長度= 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 ==:巴斯Aldrin
拋出的異常:mscorlib.dll中的'System.Security.Cryptography.CryptographicException'
要解密的數據的長度無效。
我已經添加了一個示例 – Kanky
請注意,密碼應該是散列,*不*加密 – Plutonix
對不起,我的壞^ _ ^我對Base64沒有太多瞭解 –