2009-03-26 8 views
3

내가 작업중인 프로젝트 중 하나에서 암호화 메커니즘을 사용해야합니다. 나는 RSA 암호화를 탐색하고 배울 몇 가지 샘플 프로그램을 썼다.RSA 암호화 (RSACryptoServiceProvider)를 사용하여 암호화 된 데이터 크기

RSA 암호화의 블록 크기가 16 바이트임을 이해합니다.

 
public static string Encrypt (string input) { 
    var byteConverter = new UnicodeEncoding(); 

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider(); 
    byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false); 
    return BytesToString (output); //BytesToString() converts the bytes to hex string 
} 

지금은 128 바이트 (256 개 진수 문자)입니다 얻을 암호화 된 문자열 : 그래서 입력으로 기능 아래에 문자열 "12345678"를했다. 이 문자열은 나에게 너무 큽니다. 16 바이트의 일반 데이터를 제공하면 16 바이트의 암호화 된 데이터를 얻길 바랬습니다. 내가 뭔가 잘못하고 있는거야? 이 일이 일어날 것입니까? 어떻게 든 암호화 된 데이터를 줄일 수 있습니까?

답변

12

당신은 틀렸어요. RSA는 블록 암호가 아니므로 블록 크기에 대해 실제로 말할 수는 없습니다.

RSA 암호화의 출력은 RSA 모듈과 길이가 같습니다. 코드에서 RSA 키를 지정하지 않았으므로 런타임에서 (기본 키를 사용함) 기본 키를 사용합니다. 그 키는 분명히 출력 길이를 설명하는 1024 비트 모듈을 가지고 있습니다.

대신 AES 암호화를 조사하고 싶을 수도 있습니다. 많은 이유로 RSA를 사용하여 키를 암호화 한 다음 AES 또는 유사한 대칭 암호 알고리즘을 사용하여 실제 텍스트를 암호화해야합니다.

AES는 블록 크기가 16 바이트 인 블록 암호이므로 16 바이트의 일반 데이터를 16 바이트의 암호화 된 데이터로 암호화합니다 (사용중인 패딩 및 초기화 벡터 전송 방법에 따라 다름).

관련 문제