PHP 與 AES 256 有關(guān)的解密技術(shù)有很多,例如 OpenSSL 等。在實際應(yīng)用環(huán)境中,數(shù)據(jù)傳輸?shù)募用芙饷芗夹g(shù)十分重要。本文將重點介紹在 PHP 中如何使用 AES 256 解密加密數(shù)據(jù)。
首先,讓我們來看一下 PHP 中如何使用 AES 256 方法。在 PHP 中,我們可以使用 openssl_decrypt 函數(shù)來解密數(shù)據(jù)。openssl_decrypt 函數(shù)具有以下語法:
$decrypted=openssl_decrypt(string $data , string $method , string $key): string
這里,$data 是要解密的數(shù)據(jù),$method 參數(shù)指定的是加密算法的名稱,而 $key 則是用于解密數(shù)據(jù)的關(guān)鍵字。
假設(shè)我們現(xiàn)在有以下加密的字符串:
$encrypted = "Ni4xtlTEejvTJ5jkTDLFBA=="; // 這是經(jīng)過 base64 編碼后的加密字符串
字面意思是「你好,世界!」,此時我們使用 openssl_decrypt 函數(shù)來將其解密:
// 指明加密算法為 AES 256
$method = "aes-256-cbc";
// 用于解密密文的關(guān)鍵字
$key = "ThisKeyIsNotSoSecretButItIsLongEnough";
// 指明初始向量值
$iv = '1234567891011121';
// 解密數(shù)據(jù)
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $key, OPENSSL_RAW_DATA, $iv);
echo $decrypted;
運行上述代碼,輸出結(jié)果為「你好,世界!」。
值得注意的是,解密函數(shù) openssl_decrypt 的最后一個參數(shù) $iv 指明初始向量值。這一參數(shù)的作用是向同一密鑰下的不同加密數(shù)據(jù)提供不同的初始向量,保證每一次加密結(jié)果都不同。
應(yīng)用 AES 256 解密算法時,初始向量通常會從上一個解密數(shù)據(jù)中提取。也就是說,在之前的加密過程中,我們需要記住最后一次使用的初始向量值,并在下次解密時使用。
下面我們來看一個實用的例子:
class AesEncryption
{
private $key;
private $iv;
public function __construct($key, $iv)
{
$this->key = $key;
$this->iv = $iv;
}
public function encrypt($data)
{
$encrypted = openssl_encrypt($data, "aes-256-cbc", $this->key, OPENSSL_RAW_DATA, $this->iv);
return base64_encode($encrypted);
}
public function decrypt($data)
{
$decrypted = openssl_decrypt(base64_decode($data), "aes-256-cbc", $this->key, OPENSSL_RAW_DATA, $this->iv);
return $decrypted;
}
}
// 指明初始向量值
$iv = '1234567890123456';
// 用于加密密文的關(guān)鍵字
$key = 'ThisKeyIsNotSoSecretButItIsLongEnough';
$aes = new AesEncryption($key, $iv);
$encryptedData = $aes->encrypt("Hello, World!");
echo $encryptedData . "\n"; // 輸出加密數(shù)據(jù),例如:ckp/ZJUV7zN+v7PJ6q87pA==
// 從上一次解密數(shù)據(jù)的結(jié)果中提取初始向量值
$iv = substr(base64_decode($encryptedData), 0, 16);
$aes = new AesEncryption($key, $iv);
$decryptedData = $aes->decrypt($encryptedData);
echo $decryptedData; // 輸出解密數(shù)據(jù):Hello, World!
運行上述代碼,輸出結(jié)果為:
ckp/ZJUV7zN+v7PJ6q87pA==
Hello, World!
在該例子中,我們實現(xiàn)了一個支持加密和解密文本的 PHP 類。在輸入文本后,我們使用 openssl_encrypt 將其加密,然后使用 base64 編碼。對于每個加密數(shù)據(jù),我們需要記錄下來 $iv 的值,以便后續(xù)的解密。事實上,$iv 可以被看作是共享秘鑰和不同加密數(shù)據(jù)的之間的索引。
結(jié)語:本文介紹了在 PHP 中使用 AES 256 解密加密數(shù)據(jù)的方法,重點介紹了 openssl_decrypt 函數(shù)的用法。此外,我們還通過示例代碼演示了如何在實際應(yīng)用中使用初始向量值。