
Sodium Crypto AEAD AES256GCM 복호화에서 "Invalid tag" 오류는 암호화된 데이터의 인증 태그가 유효하지 않거나 손상된 경우에 발생합니다. 이 오류는 두 가지 경우에 발생할 수 있습니다.
첫 번째 경우는, 복호화 과정에서 제공된 암호화된 데이터와 복호화 키가 일치하지 않거나, 잘못된 키를 사용한 경우입니다. 이 경우는 복호화 함수에 올바른 키를 제공하지 않기 때문에 발생합니다. 따라서, 올바른 키를 사용하여 복호화 함수를 호출하도록 확인하십시오.
두 번째 경우는, 암호화된 데이터가 손상되거나 오류가 발생한 경우입니다. 이 경우는 데이터 전송 중 오류가 발생하거나, 데이터가 손상된 경우에 발생합니다. 이 경우는 복호화 함수에 올바른 데이터를 제공하지 않기 때문에 발생합니다. 따라서, 데이터를 재전송하거나, 오류를 수정한 후 다시 복호화하도록 합니다.
다음은 예시입니다.
```c
#include
#include
int main() {
unsigned char key[32] = {0}; // 키를 32바이트로 초기화합니다.
unsigned char nonce[12] = {0}; // nonce를 12바이트로 초기화합니다.
unsigned char ciphertext[1024] = {0}; // 암호화된 데이터를 1024바이트로 초기화합니다.
unsigned char tag[16] = {0}; // tag를 16바이트로 초기화합니다.
unsigned char plaintext[1024] = {0}; // 복호화된 데이터를 1020바이트로 초기화합니다.
// 키를 생성합니다.
if (randombytes_buf(key, sizeof(key)) != 0) {
return 1;
}
// nonce를 생성합니다.
if (randombytes_buf(nonce, sizeof(nonce)) != 0) {
return 1;
}
// 데이터를 암호화합니다.
int length = 1024;
if (sodium_aead_aes256gcm_encrypt(ciphertext, &length, "Hello, World!", 13, nonce, key) != 0) {
return 1;
}
// 복호화합니다.
if (sodium_aead_aes256gcm_decrypt(plaintext, &length, tag, ciphertext, 1024, nonce, key) != 0) {
if (sodium_aead_aes256gcm_decrypt_error() == 0) {
printf("Invalid tag\n");
} else {
printf("Error: %d", sodium_aead_aes256gcm_decrypt_error());
2025-05-03 22:59