藍新金流 openssl_encrypt(): Unknown cipher algorithm
前言
最近因應網站 PHP 版本升級
結果一堆原來的 function
壞掉不能使用
下面就記一個坑
實例
比如說
串藍新金流 API 時所需的 mcrypt_decrypt()
就被 PHP 從 7.2.0
之後拿掉
找了一下新的文件發現有一個新 function
=> (openssl_decrypt()
(文件參考: https://www.spgateway.com/WebSiteData/document/5.pdf)
欸~很高興直接拿來用一波
結果發現竟然報錯
openssl_encrypt(): Unknown cipher algorithm
走訪了估狗大神
試了各種方法 才發現是因為官方文件是寫
function create_mpg_aes_encrypt ($parameter = "" , $key = "", $iv = "") {
$return_str = '';
if (!empty($parameter)) {
//將參數經過 URL ENCODED QUERY STRING
$return_str = http_build_query($parameter);
}
return trim(bin2hex(openssl_encrypt(addpadding($return_str), 'aes-256-
cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv)));
}
function addpadding($string, $blocksize = 32) {
$len = strlen($string);
$pad = $blocksize - ($len % $blocksize);
$string .= str_repeat(chr($pad), $pad);
return $string;
}
但!!!
'aes-256-cbc'
這段不能斷行空格啊!
解法
把下面這個
return trim(bin2hex(openssl_encrypt(addpadding($return_str), 'aes-256-
cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv)));
給改成下面這個
return trim(bin2hex(openssl_encrypt(addpadding($return_str), 'aes-256-cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv)));
就好了
真心傻眼
真的是經驗太淺 以後真的不能直接複製貼上
紀錄一波 囧