key
과 iv
이 주어지면이 C 프로그램은 을 암호화하여 stdout
으로 출력해야합니다.(LibreSSL) libcrypto를 사용하는 AES-256-GCM 암호화
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit(ctx, EVP_aes_256_gcm(), key, iv);
const size_t block_size = 128;
unsigned char inbuf[block_size];
unsigned char outbuf[block_size + EVP_MAX_BLOCK_LENGTH];
int inlen, outlen;
for (;;)
{
inlen = fread(inbuf, 1, block_size, stdin);
if (inlen <= 0)
break;
EVP_EncryptUpdate(ctx, outbuf, &outlen, inbuf, inlen)
fwrite(outbuf, 1, outlen, stdout);
}
EVP_EncryptFinal_ex(ctx, outbuf, &outlen)
fwrite(outbuf, 1, outlen, stdout);
암호문을 해독이 성공적으로 안정적으로
openssl aes-256-gcm -in ciphertext.txt -K <key> -iv <iv> -d
을 실행하여
이 코드의 출력을 확인하고을 (오류. 간결함을 제거 확인), 그러나 나쁜 를 기록 예를 들어을 해독합니다 (예 :
).$ openssl aes-256-gcm ...
Hello World.
bad decrypt
무엇을 잘못해서이 말을 할 수 있습니까?
OP는 AES-256에 대해 묻습니다 - ** GCM **에는 제로 패딩이 포함되어 있으며 PKCS # 7 패딩은 GCM 모드에서 사용되지 않습니다. [GCM 패딩인지 여부] (https://crypto.stackexchange.com/questions/42412/gcm-padding-or-not) 및 [Galois/Counter Mode] (https://en.wikipedia.org/wiki)를 참조하십시오./Galois/Counter_Mode) – zaph
오, 우리가 틀린 대답으로 붙어있는 것처럼 보입니다. **슬퍼!** – zaph