
sodium_unpad 함수는 OpenSSL 라이브러리의 padding 함수로, 패딩된 데이터를 언패딩하는 데 사용됩니다. 패딩된 데이터는 암호화된 데이터에 추가된 패딩 바이트로 구성됩니다.
패딩된 데이터는 다음과 같은 형식으로 전달됩니다.
- 패딩된 데이터의 첫 4바이트는 패딩 유형을 나타내는 플래그입니다. 플래그는 0x00 0x01 0x02 0x03으로 구성됩니다.
- 패딩된 데이터의 다음 4바이트는 패딩된 데이터의 길이를 나타내는 길이입니다.
- 패딩된 데이터의 나머지 바이트는 암호화된 데이터입니다.
sodium_unpad 함수는 패딩된 데이터의 첫 8바이트를 읽어 패딩 유형과 길이를 확인한 후, 패딩된 데이터의 나머지 바이트를 언패딩합니다.
언패딩의 정확한 과정은 다음과 같습니다.
1. 패딩된 데이터의 첫 8바이트를 읽어 패딩 유형과 길이를 확인합니다.
2. 패딩된 데이터의 나머지 바이트를 읽어 암호화된 데이터를 얻습니다.
3. 암호화된 데이터를 언패딩합니다.
패딩된 데이터의 형식과 언패딩 함수의 입력 형식이 어떻게 매칭되는지는 다음과 같습니다.
- 패딩된 데이터의 첫 8바이트는 패딩 유형과 길이를 나타내는 플래그와 길이로 구성됩니다.
- 패딩된 데이터의 나머지 바이트는 암호화된 데이터로 구성됩니다.
해당 함수를 사용하는 데 도움이 되는 예시 코드는 다음과 같습니다.
#hostingforum.kr
c
#include
int main() {
unsigned char padded_data[1024];
unsigned char unpadded_data[1024];
// 패딩된 데이터를 생성합니다.
size_t len = 16;
randombytes(padded_data, len);
unsigned char *padded_data_ptr = padded_data;
unsigned char *unpadded_data_ptr = unpadded_data;
// 패딩된 데이터를 언패딩합니다.
if (sodium_unpad(padded_data_ptr, &unpadded_data_ptr) == 0) {
printf("Unpadded data: ");
for (int i = 0; i < len; i++) {
printf("%02x ", unpadded_data[i]);
}
printf("n");
} else {
printf("Error: unable to unpadded datan");
}
return 0;
}
참고 자료는 OpenSSL 라이브러리의 공식 문서를 참조하시기 바랍니다.
2025-06-16 08:35