AES加密總結(對稱加密)

/*常見的填充模式有: 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章