2014-12-17 2 views
1

나의 수색에 따르면 그것은 암호화를위한 가장 빠른 알고리즘 중 하나이며 실제로는 매우 빠르다고 생각합니다.암호화 및 암호 해독 성능 웹 응용 프로그램에서 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; 
    } 

그것이 좋은 방법이며, 가능한 모든 문제는 이러한 접근 방식이 아래에있다?

답변

2

예, 동일한 작업을 다시 수행하는 대신 암호화 된 결과를 일부 데이터 구조에 저장하는 것이 좋습니다. 이렇게하면 동일한 암호화 된 메시지를 다시 계산하는 시간을 절약 할 수 있습니다.

이 전략은 암호화 문자열이 적지 만 해당 문자열의 출현이 많을 때 유용합니다.

그러나 암호화해야 할 문자열이 많지만 발생 빈도가 적은 경우에도 크기의 문제가있을 수 있습니다. 데이터 구조의 크기가 커지면 성능이 저하 될 수 있습니다 (해시 맵, O (1) 검색 기능이 있지만 해시 테이블 일 가능성이 높음). 메모리 요구량이 증가합니다.

이러한 상황에서는 큰 블록의 데이터를 암호화하는 것이 좋습니다. 왜냐하면 AES는 블록 암호입니다. 그것은 데이터 덩어리에서 작동하고 그것은 큰 아니 정말 빠릅니다. 블록 수 그러나 암호화 오버 헤드가 이점 이상으로 작은 데이터에는 덜 바람직합니다.

결론

  1. 사용 데이터 구조 사전 적은 문자열 및 이상의 발생 위험이있는 경우에는 PT-CT 쌍을 저장하는 해시 맵 등. 데이터 구조의 크기를 염두에 두십시오.
  2. encrypt를 한 번 사용하고 모든 어프로치를 대체하십시오 (이 방법에서는 추가 데이터 구조가 필요하지 않습니다).
  3. 더 많은 문자열과 더 적은 어커런스를 보려면 옵션 2를 확인하거나 암호화를 차단하십시오.
1

그 중 하나는 받아 들일 만하지만, 다음과 같은 문제점이 있습니다.

  1. .add() 호출을 잠그지 않으므로 사전이 정적이므로 데이터가 손상 될 수 있습니다.
  2. 사전에 너무 많은 데이터가 들어오는 경우에는주의를 기울이지 마십시오. 데이터 일부가 삭제되지 않도록주의해야합니다. 그렇지 않으면 데이터가 너무 많이 커지면 모든 메모리를 먹을 수도 있습니다. 사전은 색인을 생성하기에 적합하기 때문에 문자열을 찾는 것이 좋습니다. 그러나 데이터가 너무 많이 올 경우 새로운 문자열을 삽입 할 때마다 성능이 저하 될 수 있습니다. 각 문자열에 여분의 카운터를 추가하고 몇 번이나 사용했는지 계산하여 최소한의 문자열만을 유지하고 나머지 시간은 삭제하십시오.
관련 문제