在 PHP 裡執行 AES 加解密,比想像中簡單,加密 (encrypt) 只要使用:

<?php
function _encrypt($data, $encryption_key) {
    // openssl_decrypt($data, $cipher_algo, $passphrase, $options)
    // $data = 已加密之資料字串
    // $cipher_algo = 加密方法 (此次使用 AES 128 ECB)
    // $passphrase = 加解密金鑰
    // $options = 預設 0
    // - OPENSSL_RAW_DATA=1
    // - OPENSSL_ZERO_PADDING=2
    // - OPENSSL_NO_PADDING=3
    // ===
    // 以下範例為 AES, key 長度 128 bits,ECB mode,PKCS5padding
    return base64_encode(openssl_encrypt($data, 'aes-128-ecb', $encryption_key, 1)); // 透過內建的 openssl 解密
} ?>

encryption_key 只要約定好的字串即可。

對應的是解密 (decrypt):

<?php
function _decrypt($data, $encryption_key) {
    // AES, key 長度 128 bits,CBC mode,PKCS5padding
    return openssl_decrypt(base64_decode($data), 'aes-128-ecb', $encryption_key, 1); // 透過內建的 openssl 解密
}
?>

 

要注意的是使用的加密方法有細節,是使用 ECB 或 CBC 模式,像我的上游使用 JAVA 進行 AES-128-ECB 加密,但是請我嘗試解密時口誤說成是 CBC 模式,我這邊雖然短文字可以正常解出,但長文字只能解出第一個 block,以我們加密的 utf-8 文字來說,只能還原前五個字,如果是地址大概就只能還原到「台北市大安」這程度而已。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(0) 人氣()