#707 - Criptare e decriptare stringhe utilizzando l'algoritmo di Rijndael

Spesso durante lo sviluppo delle nostre applicazioni ci troviamo a doverci scontrare con problemi legati alla sicurezza.
Uno su tutti è la necessità di dover nascondere in qualche modo le informazioni sensibili.
Il .NET Framework mette a disposizione una serie di classi dedicate alla crittazione dei dati. Di seguito riportiamo una classe che permette di criptare e decriptare una stringa utilizzando l'algoritmo di Rijndael a chiave simmetrica:

using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;

public class DataCrypter
{
  private static byte[] keyb;
  private static byte[] ivb = {10,61,25,12,122,120,80,248,
                                      13,182,196,212,176,46,23,85};

  // la chiave è nel web.config

  public static String keyFile = System.Configuration.ConfigurationSettings.AppSettings["KeyFile"];

  private static byte[] LoadKey()
  {
    Byte[] key = new Byte[32];
    StreamReader sr;
    sr = File.OpenText(keyFile);
    for (int i=0;i<32;i++)
    {
      String str = sr.ReadLine();
      key[i] = Byte.Parse(str);
    }
    return key;
  }

  // cripta la stringa

  public static string EncryptString(string src)
  {
    keyb = LoadKey();

    byte[] p = Encoding.ASCII.GetBytes(src.ToCharArray());
    byte[] encodedBytes = {};

    MemoryStream ms = new MemoryStream();
    RijndaelManaged rv = new RijndaelManaged();
    CryptoStream cs = new CryptoStream(ms, rv.CreateEncryptor(keyb,ivb), CryptoStreamMode.Write);
       
    try
    {
      cs.Write(p, 0, p.Length);
      cs.FlushFinalBlock();
      encodedBytes = ms.ToArray();
    }
    finally
    {
      ms.Close();
      cs.Close();
    }

    return Convert.ToBase64String(encodedBytes);
  }

  // descripta

  public static string DecryptString(string src)
  {
    if (src != String.Empty)
    {
      keyb = LoadKey();

      byte[] p = Convert.FromBase64String(src);
      byte[] initialText = new Byte[p.Length];

      RijndaelManaged rv = new RijndaelManaged();
      MemoryStream ms = new MemoryStream(p);
      CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(keyb, ivb), CryptoStreamMode.Read);

      try
      {
        cs.Read(initialText, 0,  initialText.Length);
      }
      finally
      {
        ms.Close();
        cs.Close();
      }

      StringBuilder sb = new StringBuilder();
     
      for(int i=0;i < initialText.Length;++i)
      {
        sb.Append((char)initialText[i]);
      }
      return sb.ToString();
    }
    return src;
  }

  public DataCrypter()
  {}
}


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

giogiu scrive:
#707 - Criptare e decriptare stringhe utilizzando l'algoritmo di Rijndael

Hola!Sto criptando un file PDF usando uno stream ma purtroppo sebbene mi fa l'encrypt non mi esegue correttamente il decripty!Qualcuno sa dirmi perchè...
giovedì 27 settembre 2007
r.cicca scrive:
#707 - Criptare e decriptare stringhe utilizzando l'algoritmo di Rijndael

L'articolo non è molto chiaro, esempio cos'è e a cosa server la variabile "ivb"? Perchè la chiave viene letta con "sr.ReadLine();" da un file dove è ...
giovedì 12 maggio 2005 | 4 risposte

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC