Hallo!
Ik ben bezig met een applicatie welke tekst moet kunnen encrypten / decrypten. Mijn oog is gevallen op de Rijndael encryptie en ik gebruik daar de volgende van het internet geplukte methodes:
Deze methodes werken prima wanneer ik korte strings gebruik zoals "test" etc. Maar wanneer ik een string probeer te decrypten welke langer is dan 48 bytes krijg ik een foutmelding op de volgende regel in de Decrypt methode:
met de melding:
De lengte van de te coderen gegevens is ongeldig.
Als ik de text array bekijk zie ik elke keer dat deze gevuld is tot aan de 47e positie met de correcte data, maar ik snap dus niet waarom het daar stopt... ik lees nergens over een restrictie van de invoerlengte dus wat zie ik hier over het hoofd? Daarnaast vind ik het ook vreemd dat het encrypten dus wel goed gaat...
Ik heb diverse oplossingen uitgeprobeerd welke meestal bestonden uit het simpel weg veranderen van de Padding, maar dat mocht niet baten.
Ik ben bezig met een applicatie welke tekst moet kunnen encrypten / decrypten. Mijn oog is gevallen op de Rijndael encryptie en ik gebruik daar de volgende van het internet geplukte methodes:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| public static string RijndaelManagedEncryption(string plainText, string password) { byte[] text = Encoding.ASCII.GetBytes(plainText); RijndaelManaged RijndaelCipher = new RijndaelManaged(); RijndaelCipher.Mode = CipherMode.CBC; RijndaelCipher.Padding = PaddingMode.PKCS7; byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString()); PasswordDeriveBytes SecretKey = new PasswordDeriveBytes(password, salt); ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(SecretKey.GetBytes(32), SecretKey.GetBytes(16)); MemoryStream memoryStream = new MemoryStream(); CryptoStream encStream = new CryptoStream(memoryStream, Encryptor, CryptoStreamMode.Write); encStream.Write(text, 0, text.Length); encStream.FlushFinalBlock(); byte[] CipherBytes = memoryStream.ToArray(); memoryStream.Close(); encStream.Close(); return Convert.ToBase64String(CipherBytes); } public static string RijndaelManagedDecryption(string plainText, string password) { byte[] text = Convert.FromBase64String(plainText); RijndaelManaged RijndaelCipher = new RijndaelManaged(); byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString()); RijndaelCipher.Mode = CipherMode.CBC; RijndaelCipher.Padding = PaddingMode.PKCS7; PasswordDeriveBytes SecretKey = new PasswordDeriveBytes(password, salt); ICryptoTransform decryptor = RijndaelCipher.CreateDecryptor(SecretKey.GetBytes(32), SecretKey.GetBytes(16)); MemoryStream memoryStream = new MemoryStream(text); CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); text = new byte[text.Length]; int DecryptedCount = cryptoStream.Read(text, 0, text.Length); memoryStream.Close(); cryptoStream.Close(); return Encoding.ASCII.GetString(text, 0, DecryptedCount); } |
Deze methodes werken prima wanneer ik korte strings gebruik zoals "test" etc. Maar wanneer ik een string probeer te decrypten welke langer is dan 48 bytes krijg ik een foutmelding op de volgende regel in de Decrypt methode:
code:
1
| int DecryptedCount = cryptoStream.Read(text, 0, text.Length); |
met de melding:
De lengte van de te coderen gegevens is ongeldig.
Als ik de text array bekijk zie ik elke keer dat deze gevuld is tot aan de 47e positie met de correcte data, maar ik snap dus niet waarom het daar stopt... ik lees nergens over een restrictie van de invoerlengte dus wat zie ik hier over het hoofd? Daarnaast vind ik het ook vreemd dat het encrypten dus wel goed gaat...
Ik heb diverse oplossingen uitgeprobeerd welke meestal bestonden uit het simpel weg veranderen van de Padding, maar dat mocht niet baten.
[ Voor 0% gewijzigd door een moderator op 02-09-2008 16:19 . Reden: Code=c# toegevoegd :Y) ]