libmcrypt.dll、libmhash.dll 複製到 C:\Windows\System32。php.ini,移除下列兩行前的分號:extension=php_mcrypt.dllextension=php_mhash.dllphpinfo() 確認 mcrypt 區塊已載入。可透過 mcrypt_list_algorithms()、mcrypt_list_modes() 動態取得。常用常數對照:
MCRYPT_DES、MCRYPT_RIJNDAEL_128 (AES)、MCRYPT_TRIPLEDES、MCRYPT_BLOWFISH 等。MCRYPT_MODE_ECB、MCRYPT_MODE_CBC、MCRYPT_MODE_CFB、MCRYPT_MODE_OFB 等。<?php
$plaintext = '我的名字是?一般人我不告訴他!';
$key = 'key:111'; // 密鑰
$cipher = MCRYPT_RIJNDAEL_128; // AES-128
$mode = MCRYPT_MODE_CBC; // CBC 模式較 ECB 安全
// 1. 建立初始化向量 (IV)
$ivSize = mcrypt_get_iv_size($cipher, $mode);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
// 2. 加密
$ciphertext = mcrypt_encrypt($cipher, $key, $plaintext, $mode, $iv);
// 3. 儲存/傳輸時建議將 IV + 密文以 Base64 編碼
$encoded = base64_encode($iv . $ciphertext);
echo "加密結果: $encoded\n";
// --- 解密端 ---
$decoded = base64_decode($encoded);
$ivDec = substr($decoded, 0, $ivSize);
$cipherDec = substr($decoded, $ivSize);
$decrypted = mcrypt_decrypt($cipher, $key, $cipherDec, $mode, $ivDec);
// 去除 PKCS#7 padding
$decrypted = rtrim($decrypted, "\0");
echo "解密結果: $decrypted\n";
?>
| 函式 | 用途 |
|---|---|
mcrypt_get_iv_size() | 取得指定演算法/模式所需 IV 長度 |
mcrypt_create_iv() | 產生隨機 IV,建議使用 MCRYPT_DEV_URANDOM |
mcrypt_encrypt() | 加密,參數:演算法、金鑰、明文、模式、IV |
mcrypt_decrypt() | 解密,參數同加密,明文改為密文 |
openssl_encrypt()/openssl_decrypt() 或 sodium 擴展。