개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.22 21:50

Sodium_crypto_aead_xchacha20poly1305_ietf_decrypt 함수 사용 방법에 대한 질문

목록
  • 프로토콜연구가 26일 전 2025.06.22 21:50
  • 20
    1
저는 sodium_crypto_aead_xchacha20poly1305_ietf_decrypt 함수를 사용하여 데이터를 복호화하려고 합니다.

이 함수의 사용법을 알려주세요.

아래와 같은 코드를 작성했는데, 에러가 발생합니다.

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));

    }



    return 0;

}



에러가 발생하는 이유를 알려주세요.

또한, 데이터를 올바르게 복호화하는 방법을 알려주세요.

잘못된 부분이 없다면, 올바른 복호화 코드를 알려주세요.

위 코드에서 에러가 발생하는 이유는 무엇이며, 올바른 복호화 코드는 무엇일까요?

    댓글목록

    profile_image
    나우호스팅  26일 전



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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,021건 / 1 페이지

검색

게시물 검색