PHP 中自帶 AES 算法,它是一種對稱加密算法,也就是說加密和解密使用同樣的秘鑰。
下面是 PHP AES 算法的基本使用步驟:
$key = 'my secret key'; // 秘鑰 $data = 'hello world'; // 待加密數(shù)據(jù) $iv = openssl_random_pseudo_bytes(16); // 隨機(jī)生成 IV $cipherText = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); // 加密 $plainText = openssl_decrypt($cipherText, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); // 解密
代碼解釋:
- 第一行定義了秘鑰。
- 第二行是待加密的數(shù)據(jù)。
- 第三行使用 openssl_random_pseudo_bytes 函數(shù)生成一個隨機(jī)的 initialization vector (IV)。
- 第四行調(diào)用 openssl_encrypt 函數(shù)實(shí)現(xiàn)加密,其中參數(shù)分別是待加密數(shù)據(jù)、加密算法(這里使用 AES-256-CBC)、秘鑰、OPENSSL_RAW_DATA 表示不進(jìn)行數(shù)據(jù)填充,和 IV。
- 第五行調(diào)用 openssl_decrypt 函數(shù)實(shí)現(xiàn)解密,參數(shù)與加密函數(shù)類似。
PHP AES 算法還支持使用 PHP 自帶的 Mcrypt 擴(kuò)展來實(shí)現(xiàn)加密和解密。下面代碼實(shí)現(xiàn)相同的功能:
$key = 'my secret key'; // 秘鑰 $data = 'hello world'; // 待加密數(shù)據(jù) $iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM); // 隨機(jī)生成 IV $cipherText = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); // 加密 $plainText = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $cipherText, MCRYPT_MODE_CBC, $iv); // 解密
代碼解釋:
- 第一行定義了秘鑰。
- 第二行是待加密的數(shù)據(jù)。
- 第三行使用 mcrypt_create_iv 函數(shù)生成一個隨機(jī)的 initialization vector (IV)。
- 第四行調(diào)用 mcrypt_encrypt 函數(shù)實(shí)現(xiàn)加密,其中參數(shù)分別是加密算法、秘鑰、待加密數(shù)據(jù)、加密模式(這里使用 CBC)、和 IV。
- 第五行調(diào)用 mcrypt_decrypt 函數(shù)實(shí)現(xiàn)解密,參數(shù)與加密函數(shù)類似。
AES 算法是一種非常安全的加密算法,但是要注意秘鑰的安全保管。因?yàn)?AES 算法使用的是對稱加密,只有知道正確的秘鑰才能解密。如果秘鑰泄露,所有的加密數(shù)據(jù)都不再安全。因此應(yīng)該使用安全的方式來保管秘鑰,比如加密存儲在數(shù)據(jù)庫中,或者使用安全的密鑰管理系統(tǒng)來維護(hù)秘鑰。
總之,PHP 中自帶的 AES 算法和 Mcrypt 擴(kuò)展都實(shí)現(xiàn)了 AES 加密算法。使用時需要注意保管秘鑰,以及適當(dāng)選擇 IV 和加密模式等參數(shù),以獲得最佳的安全效果。