
에러는 `sodium_crypto_aead_xchacha20poly1305_ietf_decrypt` 함수의 첫 번째 인자 `plaintext`가 NULL인 경우 발생합니다. 이 함수는 복호화한 데이터를 첫 번째 인자에 저장합니다.
올바른 복호화 코드는 다음과 같습니다.
#hostingforum.kr
c
#include
int main() {
unsigned char nonce[12];
unsigned char key[32];
unsigned char ciphertext[32];
unsigned char plaintext[32];
sodium_init();
// 키 생성 및 복사
randombytes(key, 32);
// memcpy(key, "my_secret_key", 32); // 키 복사하는 부분을 주석처리
// 복호화
if (sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(plaintext, ciphertext, 32, nonce, 12, key, 32) != 0) {
printf("Error: %dn", sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(plaintext, ciphertext, 32, nonce, 12, key, 32));
} else {
printf("복호화 성공n");
printf("복호화한 데이터: ");
for (int i = 0; i < 32; i++) {
printf("%02x", plaintext[i]);
}
printf("n");
}
return 0;
}
위 코드에서 `memcpy(key, "my_secret_key", 32);` 부분을 주석처리한 이유는 `randombytes(key, 32);` 함수로 키를 생성하기 때문에 필요하지 않기 때문입니다.
위 코드에서 `sodium_crypto_aead_xchacha20poly1305_ietf_decrypt` 함수의 첫 번째 인자 `plaintext`를 NULL이 아닌 `plaintext`로 설정한 이유는 `sodium_crypto_aead_xchacha20poly1305_ietf_decrypt` 함수가 복호화한 데이터를 첫 번째 인자에 저장하기 때문입니다.
위 코드에서 `printf("복호화 성공\n");`와 `printf("복호화한 데이터: ");`를 추가한 이유는 복호화가 성공했는지 확인하기 위함입니다.
2025-06-22 21:51