今天给客户做网站数据接口的时候遇到了一个问题,客户要求接口数据进行加密防止他人盗用。对于php数据加密大部分朋友第一时间想到的应该是md5加密,但md5是单向加密并不提供解密方法,显然这个函数是不可用的。经过网上一番搜索发现,PHP常用的数据加密解密算法是DES。使用方法就是双方设置一个相同的密钥,然后使用该密钥进行加密解密。在使用DES的时候,首先需要将此扩展开启,方法如下:
php中有一个扩展可以支持DES的加密算法,是:extension=php_mcrypt.dll
在配置文件中将这个扩展打开还不能够在windows环境下使用,需要将PHP文件夹下的 libmcrypt.dll 拷贝到系统的
system32 目录下,这是通过phpinfo可以查看到mcrypt表示这个模块可以正常试用了。
具体的函数代码如下,需要的朋友可以参考下:
加密函数do_mencrypt
//$input - stuff to decrypt
//$key - the secret key to usefunctiondo_mencrypt($input,$key)
{$input=str_replace(""n","",$input);$input= str_replace(""t","",$input);$input=str_replace(""r","",$input);$key= substr(md5($key), 0, 24);$td= mcrypt_module_open('tripledes', '', 'ecb', '');$iv= mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td,$key,$iv);$encrypted_data= mcrypt_generic($td,$input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return trim(chop(base64_encode($encrypted_data)));
}
解密函数 do_mdecrypt
//$input- stuff to decrypt
//$key- the secret key to use
function do_mdecrypt($input,$key)
{$input= str_replace(""n","",$input);$input=str_replace(""t","",$input);$input= str_replace(""r","",$input);$input=trim(chop(base64_decode($input)));$td=mcrypt_module_open('tripledes','','ecb','');$key=substr(md5($key),0,24);$iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);
mcrypt_generic_init($td,$key,$iv);$decrypted_data=mdecrypt_generic($td,$input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);returntrim(chop($decrypted_data));
为了让朋友们更深入的了解该函数的使用方法,下面我们来做一个例子:
$new =do_mencrypt("wo shi
old","111");
$old = do_mdecrypt($new,"111");
echo $new."的明文是:"."
";
echo $old;
运行的结果为:
bnF+S42hS0BzXqMwPJJN82yBa4/DiYoYcTGmt0TotwY=的明文是:wo shi
old
注:加密或解密时一定要注意$key的值,加密后要想解密就必须要知道$key的值,不然不能解出正确的明文。