藍新金流 openssl_encrypt(): Unknown cipher algorithm

by Benmr

藍新金流 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)));

就好了

真心傻眼
真的是經驗太淺 以後真的不能直接複製貼上
紀錄一波 囧

You may also like

Leave a Comment