
	                	                 
에러는 `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