
암호화가 제대로 수행되지 않는 이유는 `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