다음 절차에서는 기본 암호화 함수를 사용하여 메시지를 암호화하는 단계를 설명합니다. PKCS #7 표준을 사용하여 메시지를 암호화하려면 하위 수준 메시지 함수 및 간소화된 메시지 함수를 참조하세요.
메시지를 암호화하려면
CryptGenKey 함수를 사용하여 세션 키를 생성합니다.
이 호출을 수행하면 임의 키가 생성되고 핸들이 반환되므로 키를 사용하여 데이터를 암호화하고 암호를 해독할 수 있습니다. 사용할 암호화 알고리즘도 이 시점에서 지정됩니다. CryptoAPI는 애플리케이션이 공개 키 알고리즘을 사용하여 대량 데이터를 암호화하는 것을 허용하지 않으므로 CryptGenKey 호출을 사용하여 RC2 또는 RC4와 같은 대칭 알고리즘을 지정합니다.
또는 CryptDeriveKey 함수를 사용하여 암호를 암호화에 적합한 키로 변환합니다.
지정된 암호를 가진 모든 사용자가 데이터의 암호를 해독할 수 있도록 애플리케이션이 메시지를 암호화해야 하는 경우 CryptDeriveKey 를 사용하여 암호를 암호화에 적합한 키로 변환합니다.
참고
이 경우 이 함수는 CryptGenKey 함수 대신 호출되며 후속 CryptExportKey 호출은 필요하지 않습니다.
필요한 경우 CryptSetKeyParam 함수를 사용하여 키의 추가 암호화 속성을 설정합니다.
키가 생성되면 CryptSetKeyParamfunction을 사용하여 키의 추가 암호화 속성을 설정할 수 있습니다. 이 함수를 사용하면 파일의 여러 섹션을 서로 다른 키 솔트로 암호화할 수 있으며 키의 암호화 모드 또는 초기화 벡터를 변경하는 방법을 제공합니다. 이러한 매개 변수를 사용하여 암호화가 특정 데이터 암호화 표준을 준수하도록 할 수 있습니다.
CryptEncrypt 함수를 사용하여 파일의 데이터를 암호화합니다.
CryptEncrypt 함수는 이전 단계에서 생성된 세션 키를 사용하여 데이터 버퍼를 암호화합니다.
참고
데이터가 암호화되면 암호화 알고리즘에 의해 데이터가 약간 확장될 수 있습니다. 애플리케이션은 암호화된 데이터의 길이를 기억해야 하므로 나중에 CryptDecrypt 함수에 적절한 길이를 지정할 수 있습니다.
필요에 따라 CryptExportKey 함수를 사용하여 현재 사용자가 나중에 데이터의 암호를 해독할 수 있도록 합니다.
현재 사용자가 나중에 데이터의 암호를 해독할 수 있도록 CryptExportKey 함수는 암호 해독 키를 사용자의 프라이빗 키로만 암호 해독할 수 있는 암호화된 형식(키 BLOB)으로 저장하는 데 사용됩니다. 이 함수를 사용하려면 CryptGetUserKey 함수를 사용하여 가져올 수 있는 사용자의 키 교환 공개 키가 필요합니다. CryptExportKey 함수는 파일 암호 해독에 사용하기 위해 애플리케이션에서 저장해야 하는 키 BLOB을 반환합니다.
참고
애플리케이션에 다른 사용자에 대한 인증서(또는 공개 키)가 있는 경우 액세스를 받아야 하는 각 사용자에 대해 CryptExportKey 호출을 수행하여 다른 사용자가 파일의 암호를 해독하도록 허용할 수 있습니다. 반환된 키 BLOB은 5단계와 같이 애플리케이션에서 저장해야 합니다.
암호화된 메시지 만들기
간소화된 메시지 함수를 사용하면 데이터를 보다 쉽게 암호화하고 암호를 해독할 수 있습니다. 다음 그림에서는 메시지를 암호화하기 위해 수행해야 하는 개별 작업을 보여 줍니다. 단계는 다음 목록에 설명되어 있습니다.
메시지를 암호화하려면
- 일반 텍스트 메시지에 대한 포인터를 가져옵니다.
- 대칭(세션) 키를 생성합니다.
- 대칭 키 및 지정된 암호화 알고리즘을 사용하여 메시지 데이터를 암호화합니다.
- 인증서 저장소를 엽니다.
- 받는 사람의 인증서를 가져옵니다.
- 받는 사람의 인증서에서 공개 키를 가져옵니다.
- 받는 사람의 공개 키를 사용하여 대칭 키를 암호화합니다.
- 받는 사람의 인증서에서 받는 사람의 식별자를 가져옵니다.
- 데이터 암호화 알고리즘, 암호화된 데이터, 암호화된 대칭 키 및 받는 사람 식별자 등 디지털 봉투 메시지에 다음을 포함합니다.