調用 OpenSSL AES_cbc_encrypt 後,輸出緩衝區 out 經 sprintf_s(out, "%X", out) 處理,發現密文長度總等於 IV 長度(16 字節)。
AES_cbc_encrypt 輸出的是二進制密文,長度 = 輸入長度(按 16 字節填充對齊),非可打印字符。sprintf_s(out, "%X", out) 將 out 視為單個指針值按十六進制打印(如 00A1F3C0),而非遍歷字節數組。// 十六進制字符串
char hex[256];
for (int i = 0; i < out_len; ++i)
sprintf(hex + i * 2, "%02X", (unsigned char)out[i]);
SetDlgItemText(hwnd, IDC_EDIT4, hex);
// 或 Base64 編碼(需額外庫)
使用在線 AES 工具(如 devglan)對比同鑰匙、同 IV、同明文的標準輸出,確認實現正確性。