12. august 2003 - 19:03
Der er
2 kommentarer
kryptering default nøgle...hvordan virker det??
Jeg har eksemplet fra microsofts hjemmeside:
FileStream fs = new FileStream("EncryptedFile.txt",FileMode.Create,FileAccess.Write);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
ICryptoTransform desencrypt = des.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fs,desencrypt,CryptoStreamMode.Write);
cryptostream.Write(bytearrayinput,0,bytearrayinput.Length);
cryptostream.Close();
Dette virker også fint, men når jeg decrypter får jeg en fejl pga. forkert datastørrelse og padding fejl.
Jeg har tidligere arbejdet med javas cryptology pakke, og her SKAL man selv oprette nøgler og medsende disse. Ovenstående eksempel virker også fint hvis jeg gør dette
ved at skrive:
byte[] key = key = minSymmetricAlgorithm.Key;
Er dette den korrekte måde at oprette en nøgle på?
Er der nogen der kan forklare mig hvorfor man i .Net umiddelbart ikke selv skal oprette nøglen, men istedet kan anvende en default nøgle.
Jeg sidder med bogen ".Net Security" og her anvender man bare default nøglen, uden at forklare nærmere herom.
Måske en god tutorial kan hjælpe med at afklare mine spørgsmål. Jeg har bare ikke kunne finde en på nettet.
du kan selvfølgelig selv angive hvilken nøgle der skal benyttes til kryptering/dekryptering - men det er rigtigt at når man instantierer en CryptoServiceProvider, så har den genereret en nøgle og en initialiseringsvektor... men disse kan overskrives
Prøv følgende eksempel :
string cipherString = "Hej Verden";
byte[] cipherData = System.Text.Encoding.Unicode.GetBytes(cipherString);
PasswordDeriveBytes pdb = new PasswordDeriveBytes("dillerdaller", new byte[] { 0x88, 0x81, 0x7f, 0x30, 0x7e, 0x2e, 0x3b, 0x44, 0xbf, 0x0, 0x46, 0xe8, 0xbb, 0x6f, 0x31, 0x2 } );
Rijndael algorithm = Rijndael.Create();
algorithm.Key = pdb.GetBytes(32);
algorithm.IV = pdb.GetBytes(16);
// Encrypt...
System.IO.MemoryStream encryptionStream = new System.IO.MemoryStream();
CryptoStream cryptoStream = new CryptoStream( encryptionStream, algorithm.CreateEncryptor(), CryptoStreamMode.Write );
cryptoStream.Write(cipherData, 0, cipherData.Length);
cryptoStream.Close();
byte[] encryptedData = encryptionStream.ToArray();
// Decrypt...
System.IO.MemoryStream decryptionStream = new System.IO.MemoryStream();
cryptoStream = new CryptoStream( decryptionStream, algorithm.CreateDecryptor(), CryptoStreamMode.Write );
cryptoStream.Write(encryptedData, 0, encryptedData.Length);
cryptoStream.Close();
byte[] decryptedData = decryptionStream.ToArray();
string decryptedString = System.Text.Encoding.Unicode.GetString(decryptedData);