AES加密解密是一種常用的加密算法,可以將敏感的數(shù)據(jù)進(jìn)行加密保護(hù),以防止被黑客竊取。在PHP中,我們可以通過以下源碼實(shí)現(xiàn)AES加密解密:
// 加密函數(shù) function encrypt($data, $key) { $enc_data = openssl_encrypt($data, 'AES-256-ECB', $key, OPENSSL_RAW_DATA); return base64_encode($enc_data); } // 解密函數(shù) function decrypt($enc_data, $key) { $data = base64_decode($enc_data); $dec_data = openssl_decrypt($data, 'AES-256-ECB', $key, OPENSSL_RAW_DATA); return $dec_data; }
以上代碼中,我們使用了默認(rèn)的AES-256-ECB加密算法進(jìn)行加解密,在加密過程中使用了OpenSSL擴(kuò)展中的openssl_encrypt函數(shù),同時(shí)在解密過程中使用了openssl_decrypt函數(shù)來對(duì)密文進(jìn)行解密,其中$key參數(shù)是用于加密解密的秘鑰。
我們可以通過以下方式來使用以上代碼:
$key = "123456789abcdefg"; // 秘鑰 $data = "hello world"; // 待加密數(shù)據(jù) $enc_data = encrypt($data, $key); // 加密數(shù)據(jù) echo "加密后的數(shù)據(jù):" . $enc_data . "<br>"; // 輸出加密后的數(shù)據(jù) $dec_data = decrypt($enc_data, $key); // 解密數(shù)據(jù) echo "解密后的數(shù)據(jù):" . $dec_data . "<br>"; // 輸出解密后的數(shù)據(jù)
以上代碼中,我們首先定義了$key秘鑰和待加密的$data數(shù)據(jù),然后通過encrypt函數(shù)對(duì)$data數(shù)據(jù)進(jìn)行加密并輸出加密后的數(shù)據(jù)。最后,我們使用decrypt函數(shù)對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并輸出解密后的結(jié)果。
需要注意的是,以上代碼中使用的是ECB模式,這種模式容易受到加密數(shù)據(jù)重復(fù)性的攻擊,因此在實(shí)際應(yīng)用中,應(yīng)該使用更加安全的CBC模式進(jìn)行加密。
以下是修改后使用CBC模式的AES加密解密函數(shù):
// CBC模式加密函數(shù) function encrypt_cbc($data, $key, $iv) { $enc_data = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); return base64_encode($enc_data); } // CBC模式解密函數(shù) function decrypt_cbc($enc_data, $key, $iv) { $data = base64_decode($enc_data); $dec_data = openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); return $dec_data; }
其中,$iv參數(shù)用于初始化向量,也稱為熵值。在CBC模式中,每次加密的結(jié)果都會(huì)使用前一次加密的結(jié)果作為下一次加密的輸入,因此需要使用$iv參數(shù)來初始化第一次加密的輸入數(shù)據(jù)。
我們可以使用以下代碼來測(cè)試以上函數(shù)的使用:
$key = "123456789abcdefg"; // 秘鑰 $iv = "987654321abcdefgh"; // 初始化向量 $data = "hello world"; // 待加密數(shù)據(jù) $enc_data = encrypt_cbc($data, $key, $iv); // 加密數(shù)據(jù) echo "加密后的數(shù)據(jù):" . $enc_data . "<br>"; // 輸出加密后的數(shù)據(jù) $dec_data = decrypt_cbc($enc_data, $key, $iv); // 解密數(shù)據(jù) echo "解密后的數(shù)據(jù):" . $dec_data . "<br>"; // 輸出解密后的數(shù)據(jù)
以上代碼中,我們首先定義了$key秘鑰、$iv初始化向量和待加密的$data數(shù)據(jù),然后通過encrypt_cbc函數(shù)對(duì)$data數(shù)據(jù)進(jìn)行加密并輸出加密后的數(shù)據(jù)。最后,我們使用decrypt_cbc函數(shù)對(duì)加密后的數(shù)據(jù)進(jìn)行解密,并輸出解密后的結(jié)果。
總之,在PHP中使用AES加密解密非常方便,并且可以很好地保護(hù)我們的敏感數(shù)據(jù)。