저는 암호화 및 .NET 프레임 워크에 익숙해지고 있습니다. 많은 예제를 살펴본 후에 .NET 클래스 Rfc2898DeriveBytes
을 사용할 때 혼란스럽게 반복되는 패턴을 보게됩니다. 이 클래스를 사용하여 암호화 키와 초기화 벡터를 얻는 경우 같은 방법이 사용 된 것 같습니다.Rfc2898DeriveBytes 클래스를 사용하여 키 및 IV 가져 오기
여기 키와 초기화 벡터를 얻는 것을 보여주는 MSDN blog의 코드가 있습니다.
byte[] salt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes("[email protected]$$w0rd", salt, 1000);
// generate an RC2 key
byte[] key = pwdGen.GetBytes(16);
byte[] iv = pwdGen.GetBytes(8);
다른 장소에서도 이걸 사용했습니다. 나는 이것이 다음과 같이 될 것이라고 생각했을 것입니다 ...
// generate an RC2 key
byte[] key = pwdGen.GetKey();
byte[] iv = pwdGen.GetInitializationVector();
나는 여기에 뭔가를 놓치고 있어야합니다. 키 및 초기화 벡터 (IV)가 임의의 숫자 일 경우 적절한 암호와 소금을 사용할 때 다시 얻는 방법은 무엇입니까?
Key와 IV는 같은 방법으로 파생 된 경우 어떻게 다른가요? 얼마나 많은 바이트가 매개 변수에 전달되어야 하는지를 어떻게 알 수 있습니까? – webworm
@webworm : 첫 번째'GetBytes (16)'호출은 알고리즘 출력의 바이트 0에서 15를 반환하고, 두 번째'GetBytes (8)'호출은 출력의 바이트 16에서 23을 반환합니다. 키 크기와 IV 크기가 알고리즘, 암호 모드 및 구현 선택에 의해 결정되기 때문에 바이트 수를 알 수 있습니다. – caf
임의의 소금 또는 임의의 암호이지만 일정한 소금을 사용하여 암호에서 IV를 추출하는 것이 중요합니까? –