我正在尝试加密要存储在数据库中的电子邮件正文,以避免未经授权的人阅读它以避免SQL注入攻击。
1-您对加密电子邮件有何看法?
2-为什么它不起作用?我想学习加密文本。
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触发异常
System.ArgumentException未被用户代码处理
消息=“值无效。”
源= “mscorlib程序”
堆栈跟踪: 在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)中的C:\ Documents and Settings \ Administrator \ My Documents \ Visual Studio 2008 \ Projects \ BLL \ BLL \ Contact \ History.cs:第35行 at _Default.BtnSend_Click(Object sender,EventArgs e)位于c:\ Documents and Settings \ Administrator \ My Documents \ Visual Studio 2008 \ Projects \ Demos \ ContactDemo \ Contact.aspx.cs:第46行 在System.Web.UI.WebControls.Button.OnClick(EventArgs e) 在System.Web.UI.WebControls.Button.RaisePostBackEvent(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:
答案 0 :(得分:2)
1)加密很好,但你在哪里存储密钥?如果密钥比数据更安全,那么这只是保护。是的,它确实为SQL注入添加了一层保护,但您应该通过使用参数化语句来消除SQL注入的可能性。
2)它可能失败,因为SymmetricAlgorithm是一个抽象基类,你需要实例化一个具体的类,如RijndaelManaged.Create();
此外,您可能应该使用TransformFinalBlock()而不是TransformBlock(),而使用Encoding.UTF8.GetBytes()而不是UtilityMA.StringUtil.ConvertUTF16StringToByteArray()。
这是一篇关于如何加密/解密的文章: http://www.sharpdeveloper.net/content/archive/2007/06/27/encryption-for-dummies-in-net.aspx
答案 1 :(得分:0)
试试这个。
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();