2016年5月30日 星期一

Cenet OS 6.X 預設 php 5.3 提升至 5.6版備註

緣由是CentOS 6 預設的5.3.3無法使用 mcrypt_encrypt ,因此需要提升PHP版本。過程如下:

1. 先移除原先的PHP,貌似移除這幾個其他有關聯的會一併移除。
  yum remove php php-common php-mysql  ...

2. 新增yum repository information
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm

3. 安裝 php 5.6w 底下是會用到的套件
yum install php56w php56w-common php56w-mbstring php56w-mcrypt php56w-mysql php56w-opcache php56w-xml php56w-gd ...

On ubuntu:
sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt
sudo service apache2 restart


PHP簡單的加解密如下,不過在加密結果傳遞時%20會造成CI在URL傳遞參數辨識上異常,需要特別置換處理以免失敗,目前還沒想到更好的方式就盡量選擇不易出現的字元組合即可。

function encrypt_key($str, $key)
{
  $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  
  return base64_encode(trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB, $iv)));  
}

function decrypt_key($str, $key)
{
  $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($str), MCRYPT_MODE_ECB, $iv));  
}

在$str傳入的資料中,若干字元組合會造成無法解密回來的困境,例如裡面有ll. ii 的組合,最後使用的呼叫法為
加密
$security = encrypt_key(base64_encode($str), md5($key));
解密
$rtnstr = decrypt_key(base64_decode($security), md5($key));

沒有留言: