Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#] Rijndael encryptie/decryptie

Pagina: 1
Acties:

  • TheGuest
  • Registratie: Augustus 2003
  • Laatst online: 29-01-2024

TheGuest

De enige echte

Topicstarter
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:

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) ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:39

mulder

ik spuug op het trottoir

Wie gooit de errormelding dan?

oogjes open, snaveltjes dicht


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

Lees dit eens door, misschien heb je er wat aan: http://msdn.microsoft.com/en-us/magazine/cc164055.aspx
.NET natuurlijk. De excepties worden naar de huidige locale opgegooid.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:39

mulder

ik spuug op het trottoir

Sebazzz schreef op dinsdag 02 september 2008 @ 16:14:
[...]
.NET natuurlijk. De excepties worden naar de huidige locale opgegooid.
Daar ben ik mee bekend, ik dacht dat een 'eigen' RijndaelManaged class was ;)

oogjes open, snaveltjes dicht


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

Je kan AES in .NET managed of unmanaged gebruiken ;)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]