在我的网络应用程序中,我使用AES来加密或解密数据。根据我的搜索,它是最快的加密算法之一,实际上我认为它非常快。
但有时我真的需要加密或解密许多字符串,这会导致性能问题。
对于这种方式我认为我可以使用字典来存储字符串的加密和普通版本,以便第二次我可以从字典实例中获取加密的字符串。下面的代码是我的字典实现。
private static Dictionary<string, string> _veryFastDict;
public static Dictionary<string, string> GetVeryFastDictInstance()
{
return _veryFastDict ?? (_veryFastDict = new Dictionary<string, string>());
}
,加密代码在
之下 public static string VeryFastEncrypt(string text)
{
if (GetVeryFastDictInstance().ContainsKey(text))
{
return GetVeryFastDictInstance()[text];
}
///string encryptedText
/// encryption code
GetVeryFastDictInstance().Add(text,encryptedKey);
return encryptedKey;
}
这是一种很好的方法吗?这种方法有什么问题吗?
答案 0 :(得分:2)
是的,不是重做同样的工作,而是将加密的结果存储在某些数据结构中。这节省了重新计算相同加密消息的时间。
当您使用较少的加密字符串但这些字符串很多时,此策略很有用。
但是这也可能存在 size 的问题,如果你有很多需要加密的字符串,但它们的出现次数较少。这会降低性能,因为它会增加数据结构的大小(可能是哈希映射,哈希表虽然它具有O(1)搜索功能)。内存需求会增加。
在这种情况下,加密大块数据是一种解决方法。因为AES是分组密码。它适用于数据块,对于大型数据而言,它真的很快。块。但是对于小数据来说它不太受欢迎,因为加密开销不仅仅是优势。
结论:
答案 1 :(得分:1)
这是可以接受的,但我在这里看到以下问题。
.add()
来电,因此您可能会导致数据损坏,因为字典是静态的。