2012-11-21 5 views
18

AES를 사용하여 데이터를 암호화해야했습니다. 연구하면서 나는 AesCryptoServiceProvider 클래스를 발견했다.RijndaelManaged vs AesCryptoServiceProvider (AES 암호화)

암호화에 대해 거의 알지 못하고 초기화 벡터 (IV)가 무엇인지 알지 못했기 때문에 스택 오버플로에서 AES 예제를 검색하려고 시도하여 this question으로 연결됩니다.

스택 오버플로 링크가 RijndaelManaged 클래스를 사용하는 이유는 무엇입니까? RijndaelManagedAesCryptoServiceProvider 클래스가 같은 일을하고 있습니까?

+0

아니요 동일한 일을하지 않습니다. http://stackoverflow.com/a/4863924/328397 – LamonteCristo

+0

[가능한 이유는 RijndaelManaged와 AesCryptoServiceProvider가 서로 다른 결과를 반환합니까?] (http://stackoverflow.com/questions/957388/why-are-rijndaelmanaged-and- aescryptoserviceprovider-returning-different-results) –

답변

25

AES는 Rijndael을 기반으로하지만 블록 크기는 128 비트로 제한됩니다. Rijndael은 더 넓은 범위의 블록 크기를 지원하며 많은 암호화 라이브러리는 AES를 보완하기 위해 별도의 Rijndael 구현을 제공합니다.

블록 크기 128, 160, 192, 224 및 256 비트는 Rijndael 알고리즘에서 지원되지만 AES 표준에서는 128 비트 블록 크기 만 지정됩니다. [Wikipedia]

RijndaelManaged 클래스에 링크되었습니다. AES에 해당하는 클래스는 AesManaged입니다. 클래스 사이의 차이에 대해서

: AesManaged 단순히 FIPS 호환되지 않는 상기 FIPS 그룹 정책 플래그가 설정되어있는 경우는 예외를 발생 사용될 때 128 AesManagedRijndaelManaged 설정된 블록 크기 RijndaelManaged를 이용한다. .NET Framework 4.6.2 (2016 년 8 월)에는 AesCng 클래스가 추가되었습니다.이 클래스는 AES 알고리즘 CNG 버전의 구현입니다.

An IV은 특정 대칭 작동 모드 (예 : CBC 모드)에서 필요로하는 블록 크기와 길이가 동일한 임의의 데이터 조각입니다. 전형적으로 IV는 평문의 첫 번째 블록 또는 암호문의 첫 번째 블록과 결합 (XOR-ed)됩니다. 같은 메시지를 두 번 동일한 키로 암호화해도 동일한 결과가 나오지 않도록하는 것이 좋습니다.

+0

덕분에 너무 많은 Duncan. 블록 크기를 어떻게 지정합니까? 예를 들어, Rijndael은 255 비트와 같은 더 넓은 범위의 블록 크기를 지원한다고 언급했습니다. 그것은 IV 키의 길이에 의해 결정됩니까? 16 비트의 키를 전달하면 256 비트 암호화를 사용하는 32 바이트의 IV 키를 전달하면 128 비트 암호화를 사용하게됩니까? –

+0

잘 모르겠습니다 - 수업을 직접 사용하지 않았습니다. 만약 내가 추측해야만한다면, IV 길이로부터 유추되지 않는다면 수동으로'BlockSize' 속성을 설정해야 할 수도 있습니다. –

+3

"AesManaged"와 관련하여 차이점에 대한 마지막 진술은 매우 잘못되었습니다. 'AesManaged'는 단순히 블록 크기를 128로 설정 한'RijndaelManaged'를 사용합니다.'AesManaged' 또한 FIPS와 호환되지 않으며 FIPS 그룹 정책 플래그가 설정된 경우 예외를 throw합니다. 현재 .NET에서는 CNG 버전의 AES 알고리즘을 지원하지 않습니다. –