Bene per gli starter le chiavi non sono stringhe, le chiavi sono blob binari. PlainText è lo stesso, non è in realtà testo, di nuovo è un blob binario.
Ora, naturalmente, è possibile convertire le stringhe di byte array utilizzando Encoding.UTF8.GetBytes(message)
, tuttavia quando si converte i tasti avanti e indietro è un po 'più complicato, di solito uso Convert.ToBase64String
e Convert.FromBase64String
.
Non dimenticate che i cifrari a blocchi hanno bisogno anche un'altra cosa, il vettore di inizializzazione, quindi in realtà i vostri metodi di firme dovrebbe essere
byte[] Encrypt(byte[] plainText, byte[] key, byte[] iv)
byte[] Decrypt(byte[] cipherText, byte[] key, byte[] iv)
La chiave e IV deve essere numeri casuali crittograficamente sicuro, don' t digitarli e non usare la funzione Random di C#. Le dimensioni della chiave e della IV dipendono dall'algoritmo di cifratura utilizzato e sono accessibili dalle proprietà delle classi.
Per generare una CSRPNG fai qualcosa come
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] key = new byte[algorithm.KeySizeValue/8];
rng.GetBytes(key);
byte[] iv = new byte[algorithm.BlockSizeValue/8];
rng.GetBytes(iv);
È inoltre possibile utilizzare la classe Rfc2898DeriveBytes per derivare una chiave e IV da una password e un sale, ma ancora una volta il sale dovrebbe essere un numero casuale crittograficamente sicuro . Dovresti anche notare quando crei un algoritmo simmetrico una chiave sicura e IV viene generata per te.
In questo modo è possibile scegliere la codifica corretta per il testo, sia esso UTF8, ASCII o qualsiasi altra cosa. I collegamenti hanno abbastanza campioni quindi tagliare e incollare qui è piuttosto inutile.
Rijndael non è simmetrico? –
Credo che sia –
Consiglierei di usare Rijndael, quindi :) –