개발자 Q&A

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

2025.05.11 21:05

Sodium_crypto_aead_aes256gcm_encrypt 함수 사용 중 발생하는 오류

목록
  • 오픈소스광신도 19일 전 2025.05.11 21:05
  • 27
    1
제가 공부하는 과정에서 sodium_crypto_aead_aes256gcm_encrypt 함수를 사용하여 데이터를 암호화하는 과정에서 발생하는 오류에 대해 도움을 부탁드립니다.

제가 사용한 코드는 다음과 같습니다.
c

#include 



int main() {

    unsigned char key[crypto_aead_aes256gcm_KEYBYTES];

    unsigned char nonce[crypto_aead_aes256gcm_NPUBBYTES];

    unsigned char message[] = "Hello, World!";

    unsigned char ciphertext[crypto_aead_aes256gcm_ABYTES + strlen((char*)message)];



    // 키 생성

    crypto_aead_aes256gcm_keygen(key);



    // 비공개 키 생성

    crypto_aead_aes256gcm_npubgen(nonce, key);



    // 암호화

    unsigned long long tag = crypto_aead_aes256gcm_encrypt(ciphertext, message, strlen((char*)message), nonce, key);



    return 0;

}


이 코드에서 암호화가 제대로 수행되지 않고, 암호화된 데이터가 잘못된 데이터로 출력되는 것을 확인했습니다.

암호화가 제대로 수행되지 않는 이유는 무엇이며, 올바른 암호화 코드를 작성하는 방법을 알려주시 부탁드립니다.

    댓글목록

    profile_image
    나우호스팅  19일 전



    암호화가 제대로 수행되지 않는 이유는 `crypto_aead_aes256gcm_encrypt` 함수의 반환 값인 `tag`을 사용하지 않고 암호화된 데이터를 바로 출력했기 때문입니다. `tag`은 암호화된 데이터의 유효성을 확인하는 데 사용되며, 올바른 `tag`을 사용하지 않으면 암호화된 데이터가 잘못된 데이터로 출력됩니다.

    올바른 암호화 코드를 작성하는 방법은 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    int main() {
    
        unsigned char key[crypto_aead_aes256gcm_KEYBYTES];
    
        unsigned char nonce[crypto_aead_aes256gcm_NPUBBYTES];
    
        unsigned char message[] = "Hello, World!";
    
        unsigned char ciphertext[crypto_aead_aes256gcm_ABYTES + strlen((char*)message)];
    
        unsigned char tag[crypto_aead_aes256gcm_ABYTES];
    
    
    
        // 키 생성
    
        crypto_aead_aes256gcm_keygen(key);
    
    
    
        // 비공개 키 생성
    
        crypto_aead_aes256gcm_npubgen(nonce, key);
    
    
    
        // 암호화
    
        unsigned long long len = crypto_aead_aes256gcm_encrypt(ciphertext, message, strlen((char*)message), nonce, key, tag, &len);
    
    
    
        // 암호화된 데이터와 태그 출력
    
        printf("암호화된 데이터: ");
    
        for (int i = 0; i < len; i++) {
    
            printf("%02x", ciphertext[i]);
    
        }
    
        printf("n");
    
        printf("태그: ");
    
        for (int i = 0; i < crypto_aead_aes256gcm_ABYTES; i++) {
    
            printf("%02x", tag[i]);
    
        }
    
        printf("n");
    
    
    
        return 0;
    
    }
    
    


    이 코드에서는 `crypto_aead_aes256gcm_encrypt` 함수의 반환 값인 `len`을 사용하여 암호화된 데이터의 길이를 가져옵니다. 또한 `tag`을 별도로 출력하여 암호화된 데이터의 유효성을 확인할 수 있습니다.

    2025-05-11 21:06

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

검색

게시물 검색