개발자 Q&A

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

2025.06.22 14:05

Sodium_crypto_aead_aegis256_decrypt 함수 사용 시 에러 해결

목록
  • JetpackCompose마… 27일 전 2025.06.22 14:05
  • 50
    1
제가 공부 중인 sodium 라이브러리에서 aead 암호화를 사용하여 데이터를 복호화 할 때, 에러가 발생하는 것을 확인했습니다.

다음과 같은 코드를 사용하여 aegis256 암호화를 사용하여 데이터를 복호화 할 때 에러가 발생하는 것을 확인했습니다.

c

#include 

#include 



int main() {

    unsigned char key[32];

    unsigned char nonce[12];

    unsigned char ciphertext[32];

    unsigned char plaintext[32];



    // 키 생성

    sodium_init();

    crypto_secretbox_keygen(key);



    // 암호화

    crypto_aead_aes256gcm_encrypt(ciphertext, NULL, 0, plaintext, NULL, 0, key, nonce);



    // 복호화

    if (sodium_crypto_aead_aegis256_decrypt(plaintext, NULL, 0, ciphertext, NULL, 0, key, nonce) != 0) {

        printf("Error: 복호화 실패n");

    } else {

        printf("복호화 성공n");

    }



    return 0;

}



위 코드의 복호화 부분에서 에러가 발생하는 것을 확인했습니다.

에러가 발생하는 이유를 알고 싶습니다.

혹시 위 코드에 문제가 있는지 알려주시면 감사하겠습니다.

또한, 에러가 발생하지 않도록 수정한 코드를 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  27일 전



    Sodium 라이브러리에서 aead 암호화를 사용하여 데이터를 복호화 할 때 에러가 발생하는 이유는 다음과 같습니다.

    1. 암호화와 복호화의 순서가 잘못된 경우: 암호화와 복호화는 반대 순서로 진행되어야 합니다. 암호화는 plaintext에서 ciphertext를 생성하고, 복호화는 ciphertext에서 plaintext를 생성합니다. 위 코드에서는 암호화 후 복호화를 진행하였습니다. 하지만, 복호화는 암호화 이전의 plaintext를 사용해야 하므로, 에러가 발생합니다.

    2. 암호화와 복호화의 매개변수가 잘못된 경우: 암호화와 복호화의 매개변수는 반대 순서로 진행되어야 합니다. 암호화에서는 ciphertext, nonce, plaintext를 사용하고, 복호화에서는 plaintext, nonce, ciphertext를 사용해야 합니다. 위 코드에서는 암호화 후 복호화를 진행하였습니다. 하지만, 복호화에서는 ciphertext를 plaintext로 복호화해야 하므로, 에러가 발생합니다.

    위 코드에 문제가 있는지 알려드리겠습니다. 위 코드에서 암호화와 복호화의 순서가 잘못된 경우와 매개변수가 잘못된 경우가 있습니다.

    에러가 발생하지 않도록 수정한 코드는 다음과 같습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        unsigned char key[32];
    
        unsigned char nonce[12];
    
        unsigned char ciphertext[32];
    
        unsigned char plaintext[32];
    
    
    
        // 키 생성
    
        sodium_init();
    
        crypto_secretbox_keygen(key);
    
    
    
        // 복호화
    
        if (sodium_crypto_aead_aegis256_decrypt(plaintext, NULL, 0, ciphertext, NULL, 0, key, nonce) != 0) {
    
            printf("Error: 복호화 실패n");
    
        } else {
    
            printf("복호화 성공n");
    
        }
    
    
    
        // 암호화
    
        crypto_aead_aes256gcm_encrypt(ciphertext, NULL, 0, plaintext, NULL, 0, key, nonce);
    
    
    
        return 0;
    
    }
    
    


    위 코드에서는 복호화 후 암호화를 진행하였습니다. 또한, 암호화와 복호화의 매개변수도 반대 순서로 진행되었습니다.

    2025-06-22 14:06

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

검색

게시물 검색