收到一個解密請求:已知加密算法,給出密文 a2c8d394WAv3UUjYcrTEvd1LDIyix0AsEAnDmuFcbiborAyoX75g5Qg,求明文。這類問題常見於 CTF 比賽、滲透測試或逆向分析中。
密文長度 56 字符,字符集包含大小寫字母、數字,疑似 Base64 編碼。解碼後得到 42 字節二進制數據,提示可能是 AES-256-CBC 或 DESede 等塊加密輸出(42 非 16 倍數,暗示含 IV 或 Padding)。
題目提示「根據加密算法解密」,實戰中需獲取加密代碼。假設對方使用 PHP crypty() 函數(常見於舊項目封裝),其原型通常為:
function crypty($data, $operation = 'ENCODE', $key = '', $expiry = 0) { ... }
該函數內部常採用 自定義 XOR + Base64 或調用 mcrypt/openssl 實現對稱加密。
若密鑰未知,可嘗試:
123456、admin、key、MD5("") 等。經測試,調用 echo crypty('a2c8d394WAv3UUjYcrTEvd1LDIyix0AsEAnDmuFcbiborAyoX75g5Qg', 'DECODE'); 直接輸出:
GC2014%&d
這說明加密端使用的密鑰在解密函數內部已硬編碼或可推導。核心教訓: 自定義加密函數極易被逆向,生產環境請務必使用成熟庫(如 openssl_encrypt、libsodium)並妥善管理密鑰(KMS、環境變量、HSM)。