[英]C# string encryption performance
我有一個帶有一堆字段的類,在保存之前需要對其進行加密,類似這樣;
class MyClass
{
public string CustomerName{ get; set; }
public string Address1{ get; set; }
public string Address2{ get; set; }
public string Town{ get; set; }
public string Postcode{ get; set; }
// updated
public DateTime RegistrationDate { get; set; } // don't encrypt
}
加密此對象中字段的最有效方法是什么? 如果我們必須加密100或1000個這些對象怎么辦? (我們可以利用TPL嗎?)
更新 :
有些字段可能不需要加密,因此我不想加密整個類。
.NET4是可以接受的。
假設無論您的應用程序層如何,最終都希望使用加密字段,則必須自行計時,以獲取系統和配置的結果。 通常,您可以使用並行任務進行壓縮,如以下示例代碼所示:
RijndaelManaged csp = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.ISO10126 };
// TODO: define Key and IV
Stopwatch encryptionTime = Stopwatch.StartNew();
Parallel.For(0, 1000, i =>
{
string fieldValue = "abcdef...";
byte[] fieldBytes = UTF8Encoding.UTF8.GetBytes(fieldValue);
byte[] fieldEncrypred;
using (var ms = new MemoryStream())
using (var cs = new CryptoStream(ms, csp.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(fieldBytes, 0, fieldBytes.Length);
cs.FlushFinalBlock();
fieldEncrypred = ms.ToArray();
}
});
encryptionTime.Stop();
Console.WriteLine(encryptionTime.Elapsed.TotalMilliseconds);
您可以修改以上內容以滿足您的需求並執行自己的測試。
對於以上示例,您將需要:
using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
首先,序列化整個對象(例如,使用protobuf-net),然后使用CryptoStream加密序列化的字節。
如果生成的字節通常很小(例如,小於256KB),則可以將它們存儲在sql數據庫的varbinary(MAX)字段中。 如果它們通常較大,最好將它們作為文件存儲在文件系統中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.