首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

AES-CBC 加密輸出長度異常:IV 長度誤區

     編輯:程式設計綜合問答

現象

調用 OpenSSL AES_cbc_encrypt 後,輸出緩衝區 out 經 sprintf_s(out, "%X", out) 處理,發現密文長度總等於 IV 長度(16 字節)。

原因剖析

  1. AES_cbc_encrypt 輸出的是二進制密文,長度 = 輸入長度(按 16 字節填充對齊),非可打印字符。
  2. sprintf_s(out, "%X", out) 將 out 視為單個指針值按十六進制打印(如 00A1F3C0),而非遍歷字節數組。
  3. 導致輸出字符串長度固定為指針寬度(32/64 位下 8/16 字符),與 IV 長度巧合接近。

正確輸出方式

// 十六進制字符串
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、同明文的標準輸出,確認實現正確性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved