簡體   English   中英

C#字符串加密性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM