2010-01-05 7 views
1

J'essaie de crypter un corps d'e-mail à stocker dans la base de données, et cela pour éviter que la personne non autorisée ne le lise aussi pour éviter une attaque par injection SQL.Exception d'algorithme symétrique

1- Que pensez-vous du cryptage du courrier électronique?
2- Pourquoi cela ne fonctionne 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(); 

feux de crypto.TransformBlock exception
System.ArgumentException était non gérée par le code utilisateur Message = "La valeur était non valide." Source = "mscorlib"

StackTrace: à System.Security.Cryptography.RijndaelManagedTransform.TransformBlock (Byte [] InputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] OutputBuffer, Int32 outputOffset) à Demo.BLL.Contact .History.SendEmail (String HTMLBody, Int32 Record_Id) dans C: \ Documents and Settings \ Administrateur \ Mes documents \ Visual Studio 2008 \ Projects \ BLL \ BLL \ Contact \ History.cs: ligne 35 at _Default.BtnSend_Click (Expéditeur d'objet , EventArgs e) dans c: \ Documents and Settings \ Administrateur \ Mes documents \ Visual Studio 2008 \ Projects \ Demos \ ContactDemo \ Contact.aspx.cs: ligne 46 à System.Web.UI.WebControls.Button.OnClick (EventArgs e) à System.Web.UI.WebControls.Button.RaisePostBackEven t (String eventArgument) à System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) à System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler SourceControl, String eventArgument) à System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) à System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException:

Répondre

0

Essayez cette place.

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(); 
2

1) Encrypting est très bien, mais où vous stocker les clé? C'est seulement une protection si la clé est quelque part plus sûre que les données. Oui, il 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 peut échouer car SymmetricAlgorithm est une classe de base abstraite, et vous devez instancier une classe concrète comme RijndaelManaged.Create();

De même, 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 encypt/decrypt: http://www.sharpdeveloper.net/content/archive/2007/06/27/encryption-for-dummies-in-net.aspx

Questions connexes