1 votes

Exception pour l'algorithme symétrique

J'essaie de crypter le corps d'un courriel qui sera stocké dans une base de données, afin d'éviter que des personnes non autorisées ne le lisent et pour éviter les attaques par injection SQL.

1- Que pensez-vous du cryptage de l'email ?
2- Pourquoi ça ne marche pas ? Je veux apprendre à crypter un texte de toute façon.

    SymmetricAlgorithm symAlgo = SymmetricAlgorithm.Create();
    // I will not use the default keys, although I think they are random enough.
    symAlgo.GenerateKey();
    symAlgo.GenerateIV();

    byte[] key = symAlgo.Key;
    byte[] iv = symAlgo.Key;

    ICryptoTransform crypto = symAlgo.CreateEncryptor();
    byte[] block = UtilityMA.StringUtil.ConvertUTF16StringToByteArray(HTMLBody);
    byte[] cipherText = new byte[block.Length + 32];

    crypto.TransformBlock(block, 0, block.Length, cipherText, 0);

    symAlgo.Clear();
    crypto.Dispose();

crypto.TransformBlock déclenche une exception
System.ArgumentException n'a pas été géré par le code utilisateur Message="La valeur n'est pas valide". Source="mscorlib"

StackTrace : at System.Security.Cryptography.RijndaelManagedTransform.TransformBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[] outputBuffer, Int32 outputOffset) at Demo.BLL.Contact.History.SendEmail(String HTMLBody, Int32 Record_Id) in C:\Documents et paramètres \Administrator\My Documents \Visual Studio 2008 \Projects\BLL\BLL\Contact\History.cs :ligne 35 at _Default.BtnSend_Click(Object sender, EventArgs e) in c : \Documents et paramètres \Administrator\My Documents \Visual Studio 2008 \Projects\Demos\ContactDemo\Contact.aspx.cs :ligne 46 at System.Web.UI.WebControls.Button.OnClick(EventArgs e) at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException :

2voto

Computer Linguist Points 6570

1) Le chiffrement, c'est bien, mais où stockerez-vous la clé ? Ce n'est une protection que si la clé se trouve dans un endroit plus sûr que les données. Oui, cela ajoute une couche de protection contre l'injection SQL, mais vous devriez éliminer les possibilités d'injection SQL en utilisant des instructions paramétrées.

2) Il se peut qu'il échoue parce que SymmetricAlgorithm est une classe de base abstraite, et que vous devez instancier une classe concrète comme RijndaelManaged.Create() ;

De plus, vous devriez probablement utiliser TransformFinalBlock() au lieu de TransformBlock(), et Encoding.UTF8.GetBytes() au lieu de UtilityMA.StringUtil.ConvertUTF16StringToByteArray().

Voici un article sur la façon de crypter/décrypter : http://www.sharpdeveloper.net/content/archive/2007/06/27/encryption-for-dummies-in-net.aspx

0voto

Kevin Montrose Points 11936

Essayez plutôt ceci.

SymmetricAlgorithm symAlgo = SymmetricAlgorithm.Create();
// I will not use the default keys, although I think they are random enough.
symAlgo.GenerateKey();
symAlgo.GenerateIV();

byte[] key = symAlgo.Key;
byte[] iv = symAlgo.Key;

byte[] cipherText;

using(ICryptoTransform crypto = symAlgo.CreateEncryptor())
{
  byte[] block = UtilityMA.StringUtil.ConvertUTF16StringToByteArray(HTMLBody);
  cipherText = crypto.TransformFinalBlock(block, 0, block.Length)
}

symAlgo.Clear();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X