[Snippet] AES 加密 with CBC & PKCS7 on PHP
AES (Advanced Encryption Standard) 進階加密標準,目前已成為流行的對稱式加密法之一,也是美國國家安全局 NSA 批准可用在最高機密資訊上的加密方式(聽起來敲厲害的啊~~),當然隨著密鑰的長度越長(128, 192, 256 bits),安全性就越高。更多詳細介紹可參考 wiki
這裡分享的 Snippets 是固定的 128 bits密鑰,並且針對要加密的資料做 base64 encode。
public function aesDecrypt() {
$encryptedData = "6lbH0qa6J1Sl5/I5C2YeGg==";
$cipher = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$key = "A123456789012345"; // 回合金鑰
$iv = "B123456789012345"; // 密鑰
$initializationVectorSize = mcrypt_get_iv_size($cipher, $mode);
$data = mcrypt_decrypt(
$cipher,
$key,
base64_decode($encryptedData),
$mode,
$iv
);
$pad = ord($data[strlen($data) - 1]);
return substr($data, 0, -$pad);
}
public function getAesEncrypt() {
$xml_data = "AllPayTest";
$cipher = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$key = "A123456789012345"; // 回合金鑰
$iv = "B123456789012345"; // 密鑰
$blockSize = mcrypt_get_block_size($cipher, $mode);
$pad = $blockSize - (strlen($xml_data) % $blockSize);
return base64_encode(mcrypt_encrypt(
$cipher,
$key,
$xml_data . str_repeat(chr($pad), $pad),
$mode,
$iv
));
}
如果密鑰希望每次加密時都可以不一樣,可以參考此 gist