由于前段时间闲着无聊没事做去捣鼓一个PHP的网络验证系统!
想用AES来实现客户端和服务端的双向动态加密,客户端用易语
言编写,由于AES算法的填充方式和IV不同,所以不能达到互
解,于是想到了用E写个DLL给PHP调用!由于易写的DLL不是标
准的com,所以PHP调用需要用非com的调用方法!PHP需要用到
这个扩展组件:dynwrap.dll 首先放这个dll在system32目录下再
注册这个组件到system 然后
在把这个dll放在exr目录下然后php配置文件需要加载这个dll
一下是PHP加载DLL的类
dll=new COM("DynamicWrapper");
$this->path=dirname(__FILE__);//获取该脚本的绝对路径
}
public function EnAES_Path_($text,$key){
$this->dll->Register("AES.dll", "EnAES_Path", 'i=sss', "f=s", "r=l");
$file_num=$this->dll->EnAES_Path($text,$key,$this->path);
if($file_num!=0){
return $file_num;
}
}
public function DeAES_Path_($mi,$key){
$this->dll->Register("AES.dll", "DeAES_Path", 'i=sss', "f=s", "r=l");
$file_num=$this->dll->DeAES_Path($mi,$key,$this->path);
if($file_num!=0){
return $file_num;
}
}
public function Read_File($file_name){
$file_N="AES_".$file_name.".tmp";
$file_con="";
$file_con=@file_get_contents($file_N);
return $file_con;
}
public function Delete_File($file_name){
$file_N="AES_".$file_name.".tmp";
@unlink($file_N);
}
}
?>
在Register("AES.dll", "EnAES_Path", 'i=sss', "f=s", "r=l");这里面
的几个参数:第一个参数是你DLL文件名,第二个参数是你DLL里
面的方法名,第三个参数i=sss 表示你dll的方法参数的对应的类
型,如:你的dll有两个参数是文本的型的,那就I=ss !第四个参
数"f=s"一般固定 最后一个参数是你返回的类型!因为PHP调用
非COM组件的dll返回s 也就是string类型接收不到为空,我就
用了一个笨办法,在dll里面把数据写出文件 返回文件号,然后
php去读取!如果有好一点的办法希望各位多多指教!由于第一次
写博客,可能写的不太好!