Ciao
La funzione che hai scritto di per sé è corretta, ma secondo me c'è un problema di fondo. Quando codifichi una stringa in input, il risultato codificato non può sempre essere scritto sotto forma di stringa come output, perchè potrebbe contenere valori con caratteri non validi. Per risolvere il problema, modifica la funzione che hai scritto per codificare la stringa in entrata in modo che restituisca un array di byte invece che una stringa (array di byte che ottieni direttamente da TransformFinalBlock), e modifica la funzione di decodifica per accettare come parametro lo stesso array di byte che hai ottenuto dalla decodifica della stringa. Più o meno dovresti ottenere due funzioni così:
public static byte[] EncryptString(string src)
{
if (src != null)
{
RijndaelManaged rjm = new RijndaelManaged();
rjm.KeySize = 128;
rjm.BlockSize = 128;
rjm.Key = Classes.Impostazioni.RijndaelKey;
rjm.IV = Classes.Impostazioni.RijndaelIV;
try
{
ICryptoTransform ct = rjm.CreateEncryptor();
Byte[] input = Encoding.UTF8.GetBytes(src);
Byte[] output = ct.TransformFinalBlock(input, 0, input.Length);
return output;
}
catch (System.Exception ex)
{
return null;
}
}
return null;
}
public static string DecryptString(byte[] src)
{
if (src != null)
{
RijndaelManaged rjm = new RijndaelManaged();
rjm.KeySize = 128;
rjm.BlockSize = 128;
rjm.Key = Classes.Impostazioni.RijndaelKey;
rjm.IV = Classes.Impostazioni.RijndaelIV;
try
{
ICryptoTransform ct = rjm.CreateDecryptor();
Byte[] output = ct.TransformFinalBlock(src, 0, src.Length);
return Encoding.UTF8.GetString(output);
}
catch (System.Exception ex)
{
return null;
}
}
return null;
}
Luca