Hallo Liebe Community,
Also, ich muss einige Daten Verschlüsseln,
diese Ausgeben und nach späterer Eingabe dann wieder Entschlüsseln.
Vorgabe ist AES-256.
Ich verschlüssele also einen String, dabei kommt ein Byte[] heraus.
Diesen Byte[] konvertiere ich in einen Base64-String zur Ausgabe, wobei ich Base64 vom Vorgabe Projekt beibehalten muss.
Zum entschlüsseln also dann Base64-String in Byte[] konvertieren und Entschlüsseln.
Problem:
Ich erhalte beim entschlüsseln eine System.Security.Cryptography.CryptographicException: "Die Eingabedaten sind kein vollständiger Block."
Daten wie Key, IV und Salt sind identisch, habe ich extra überprüft.
Verschlüsselung:
Entschlüsselung:
Exception tritt bei cs.FluschFinalBlock() auf.
Meiner Vermutung liegt das Problem dabei, dass beim Konvertieren des Byte[] in einen String Zeichen oder Daten verloren gehen.
Aber wie kann ich den Byte[] sonst Ausgeben, ohne Ihn in einen String konvertieren zu müssen,
bzw. wie kann ich ihn so konvertieren, dass ich ihn auch wieder entschlüsseln kann?
Ich hoffe Ihr könnt mir helfen und dass ich alle Forum-Regeln beachtet habe.
Viele Grüße
Also, ich muss einige Daten Verschlüsseln,
diese Ausgeben und nach späterer Eingabe dann wieder Entschlüsseln.
Vorgabe ist AES-256.
Ich verschlüssele also einen String, dabei kommt ein Byte[] heraus.
Diesen Byte[] konvertiere ich in einen Base64-String zur Ausgabe, wobei ich Base64 vom Vorgabe Projekt beibehalten muss.
Zum entschlüsseln also dann Base64-String in Byte[] konvertieren und Entschlüsseln.
Problem:
Ich erhalte beim entschlüsseln eine System.Security.Cryptography.CryptographicException: "Die Eingabedaten sind kein vollständiger Block."
Daten wie Key, IV und Salt sind identisch, habe ich extra überprüft.
Verschlüsselung:
VB.NET-Quellcode
- [code]
- Dim aescrypto As Aes = Aes.Create()
- Dim pdb As New Rfc2898DeriveBytes(key, salt)
- aescrypto.Key = pdb.GetBytes(32)
- aescrypto.IV = pdb.GetBytes(16)
- Dim ms As New MemoryStream()
- Dim cs As New CryptoStream(ms, aescrypto.CreateEncryptor(), CryptoStreamMode.Write)
- cs.Write(Encoding.Unicode.GetBytes(plaintext), 0, Encoding.Unicode.GetBytes(plain).Length)
- cs.FlushFinalBlock()
- cs.Close()
- Return Convert.ToBase64String(ms.ToArray())
Entschlüsselung:
VB.NET-Quellcode
- [code]
- Dim m_aesCrypto As Aes = Aes.Create()
- Dim pdb As New Rfc2898DeriveBytes(key, salt)
- m_aesCrypto.Key = pdb.GetBytes(32)
- m_aesCrypto.IV = pdb.GetBytes(16)
- Dim ms As New MemoryStream()
- Dim cs As New CryptoStream(ms, m_aesCrypto.CreateDecryptor(), CryptoStreamMode.Write)
- cs.Write(cipher, 0, cipher.Length)
- cs.FlushFinalBlock()
- cs.Close()
- Return Encoding.Unicode.GetString(ms.ToArray())
Exception tritt bei cs.FluschFinalBlock() auf.
Meiner Vermutung liegt das Problem dabei, dass beim Konvertieren des Byte[] in einen String Zeichen oder Daten verloren gehen.
Aber wie kann ich den Byte[] sonst Ausgeben, ohne Ihn in einen String konvertieren zu müssen,
bzw. wie kann ich ihn so konvertieren, dass ich ihn auch wieder entschlüsseln kann?
Ich hoffe Ihr könnt mir helfen und dass ich alle Forum-Regeln beachtet habe.
Viele Grüße
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mct“ ()