» »

[c#] DESCryptoServiceProvider key v file

[c#] DESCryptoServiceProvider key v file

Giller0 ::

LP. Pišem program ki kriptira in dekriptira določeno datoteko z simetričnim kriptografskim algoritmom (DES in AES). Vse gre, le nikakor ne kužim kako lahko generiran ključ shranim v datoteko. Ostali crypto provideri imajo metodo za shranjevanje v xml (npr. RSA) pri DES in AES pa ne duha in sluha o tem. Na googlu in v helpu sem prebral že vse živo pa nikjer nič o tem.

Se morda komu kaj sanja?

Hvala.
Jow..

Keki ::

kaj pa če greš trotlziher metodo pa pač odpreš/kreiraš file pa zapišeš v njega key kot string? Ziher ma metodo toString().
http://www.alfakan.si/
http://mihajerot.si/

Giller0 ::

Zgleda, da mi samo to preostane... toString metoda pa ne deluje, ker gre za array bytov (byte[]), oziroma moraš vsako polje arraya posebaj z toString spreminjat in zapisovat v falj, ter potem obratno, ko bereš. Pa še 2 pomembna atributa ima ta class (key in IV key), tako da bom moral nek svoj xml kreirat.

Mnja, očitno druga ne preostane :)

Hvala, LP
Jow..

zerox ::

Načeloma ti za to ni potrebno ravno XML-a kreirat. Imaš pa sicer dve možnosti. Ena je, kot si že sam omenil, da zapišeš vsakega od atributov s streamwriterjem v datoteko. Lahko pa tudi celoten objekt serializiraš ter zapišeš v file.

BlueRunner ::

DES in AES sta izpeljana iz razreda SymmetricAlgorithm. Malo dolgovezen, ampak načeloma delujoč način je:

SymmetricAlgorithm alg;

alg = new DESCryptoServiceProvider();
...
alg = new AesCryptoServiceProvider();
...

// Shrani podatke
string name = alg.ToString();
int blockSize = alg.BlockSize;
string keyData = Convert.ToBase64String(alg.Key);
string ivData = Convert.ToBase64String(alg.IV);
int cipherMode = (int)alg.Mode;
int paddingMode = (int)alg.Pading;
int feedbackSize = alg.FeedbackSize;



SymmetricAlgorithm alg;

// Preberi podatke
alg = SymmetricAlgorithm.Create(name);
alg.BlockSize = blockSize;
alg.Key = Convert.FromBase64String(keyData);
alg.IV = Convert.FromBase64String(ivData);
alg.Mode = (CipherMode)cipherMode;
alg.Padding = (PaddingMode)paddingMode;
alg.FeedbackSize = feedbackSize;
...
alg.CreateEcryptor();
...
alg.CreateDecryptor();
...

BlueRunner ::

Načeloma ti za to ni potrebno ravno XML-a kreirat. Imaš pa sicer dve možnosti. Ena je, kot si že sam omenil, da zapišeš vsakega od atributov s streamwriterjem v datoteko. Lahko pa tudi celoten objekt serializiraš ter zapišeš v file.


Serializacija na XXXManaged in XXXCryptoServiceProvider razredih ni možna. Zato ostane na voljo samo "pešačenje".

Giller0 ::

Hvala ti BlueRunner, tvoja rešitev deluje in niti ni tako dolga. Prej nisem vedel za ta Convert.ToBase64String(), ki spremeni v string cel array byte-ov.

Zdaj si generiram xml dokument in zgleda nekak tako:


SHRANJEVANJE:

String keyData = Convert.ToBase64String(kljuc.Key);
String IVData = Convert.ToBase64String(kljuc.IV);

String zapis = "< Key>" + keyData + "< /Key>< IV>" + IVData + "< /IV>";

//zapisem string v file

BRANJE:

//berem string iz file-a

string keyData = text.Substring(5, text.IndexOf("< /Key>")-5);
string IVData = text.Substring(text.IndexOf("< IV>") + 4, text.IndexOf("< /IV>") - 4 - text.IndexOf("< IV>"));


Upam samo, da DES nikoli ne generira kljuca ki vsebuje recimo niz "< /IV>", ker potem stvar več ne dela :)

Hvala še enkrat, LP.
Jow..

Zgodovina sprememb…

  • spremenil: Giller0 ()

BlueRunner ::

BASE64 kodiranje (malo pogooglaj) ne uporablja znakov < in >. Zato je popolnoma varno za uporabo v XML dokumentih.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne (strani: 1 2 3 424 25 26 27 )

Oddelek: Programiranje
1344333565 (73568) Macketina
»

E-račun

Oddelek: Programiranje
217507 (4270) ivanhoe5x
»

[JAVA] HTTPS client

Oddelek: Programiranje
173185 (1915) peterv6i
»

[Android] Nov tip shranjevanja slike

Oddelek: Programiranje
142194 (1318) urosz
»

[c#] shrani text, tabele, slike

Oddelek: Programiranje
251524 (1130) klemen93

Več podobnih tem