/*常見的填充模式有: pkcs5、pkcs7、iso10126、ansix923、zero
加密模式有:DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB
需要注意:如果method爲DES−ECB,則iv無需填寫
*/
/**
* AES加密方法
* @param string $data: 待加密字符串
* @param string $method: 加密方法。DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB
* @param string $password: 加密密鑰[密碼]
* @param string $options 充填方式,有:
0(默認)
OPENSSL_RAW_DATA=1
OPENSSL_ZERO_PADDING=2
OPENSSL_NO_PADDING=3
* @param string $iv: 密初始化向量(可選),如果有一般等於$password就行
* @return string 密文
*/
openssl_encrypt($data, $method, $password, $options, $iv)
//例子:
//ecb/5padding:
openssl_encrypt($str, 'AES-128-ECB', $key);
//cbc/5padding:
openssl_encrypt($str, 'AES-128-CBC', $key, 0, $iv)
//加密:
openssl_encrypt($str, 'AES-128-CBC',$encryptKey,0,$localIV);
//解密:
openssl_decrypt($str, 'AES-128-CBC', $encryptKey, 0, $localIV);
openssl_encrypt($message_padded, "AES-128-ECB", $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
//cbc/nopadding, OPENSSL_NO_PADDING【不填充,需要手動填充】:
$str_padded = $data;
if (strlen($str_padded) % 16) {
$str_padded = str_pad($str_padded,strlen($str_padded) + 16 - strlen($str_padded) % 16, "\0");
}
$result = openssl_encrypt($str_padded, 'AES-128-CBC', $passwd, OPENSSL_NO_PADDING, $iv);
var_dump( base64_encode($result));
祕鑰長度要注意:128位的祕鑰例子(字符串長度位16,16 * 8=128位):0123456789ABCDEF