Autor Beitrag
sun30friend
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 22.03.12 11:58 
Hallo liebe Gemeinde,

ich habe da mal wieder ein Problem wo ich Eure Erfahrung und hilfe benötige.

ich verschlüssel einen String und möchte ihn später wieder auslesen und entschlüsseln.
Allerdings habe ich das Problem das ich beim Entschlüsseln "Bad Data" als Fehlermeldung bekomme.

Ich seh bestimmt den Wald vor lauter Bäumen nicht mehr:

Key settings
ausblenden C#-Quelltext
1:
2:
private readonly byte[] key = new byte[] { xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx };
private readonly byte[] iv = new byte[] { xx, xx, xx, xx, xx, xx, xx, xx };


Verschlüsselung und schreiben in Registry:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
string input = "12345";

MemoryStream mstream = new MemoryStream();
CryptoStream cstream = new CryptoStream(mstream, new TripleDESCryptoServiceProvider().CreateEncryptor(this.key, this.iv), CryptoStreamMode.Write);

byte[] toEncrypt = new UnicodeEncoding().GetBytes(input);
cstream.Write(toEncrypt, 0, toEncrypt.Length);
cstream.FlushFinalBlock();
byte[] ret = mstream.ToArray();
                        
cstream.Close();
mstream.Close();

RegistryKey wreg = Registry.CurrentUser.CreateSubKey("Software\\Test");
wreg.SetValue("testentry", ret);


Auslesen und Entschlüsseln:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
RegistryKey regreader = Registry.CurrentUser.OpenSubKey("Software\\Test"true);

byte[] rread = (byte[])regreader.GetValue("testentry");

MemoryStream nmstream = new MemoryStream();
CryptoStream ncstream = new CryptoStream(nmstream, new TripleDESCryptoServiceProvider().CreateDecryptor(this.key, this.iv), CryptoStreamMode.Read);
byte[] fromEncrypt = new byte[rread.Length];

ncstream.Read(fromEncrypt, 0, fromEncrypt.Length);  // Hier bekomme ich den Fehler "Bad Data"

string result = new UnicodeEncoding().GetString(fromEncrypt);


Ich hoffe Ihr könnt mir folgend und auch einen Tipp geben.

Danke im Voraus und Gruß
Flo
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 22.03.12 12:26 
Hallo Flo,

hast du denn schon den Debugger benutzt? Kriegst du das gleiche Byte-Array beim Lesen zurück, was du auch hineinschreibst?
Probiere ansonsten mal
ausblenden C#-Quelltext
1:
wreg.SetValue("testentry", ret, RegistryValueKind.Binary);					


... jetzt sehe ich den Fehler (beim nochmaligen Drüber-gucken über deinen Code): dein MemoryStream beim Auslesen ist leer - du mußt da noch das Byte-Array rread hineinschreiben...
sun30friend Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 22.03.12 12:47 
Hallo Th69,

vielen Dank... So blind kann man sein.
wenn ich den memorystream fülle geht es natürlich

danke und einen schönen tag noch

Gruß
Flo