首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
382 阅读
2
影视资源采集站收录大全
304 阅读
3
linux安装或升级protoc
224 阅读
4
VFM 3.7.5 源码 - 一个极简的 PHP 私人云盘!
161 阅读
5
批量采集美女写真等图片做图片站
149 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
78
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
2
篇与
的结果
2021-06-21
php调用java类
参考:https://blog.csdn.net/qq_35921925/article/details/108110519http://www.piaoyi.org/php/php-java-bridge-jar-class.html一、centos下 PHP 调用 jar包1.准备工作1.1、php环境【php7.2】,并且将php.ini中的allow_url_include改为On1.2、安装java环境yum install java2.下载 JavaBridge.jar(快捷下载)JavaBridge.jar和Java.inc下载地址: http://php-java-bridge.sourceforge.net/pjb/download.php打一个jar包,将打包好的jar包以及JavaBridge.jar放到ext目录里面cp Hello.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext cp JavaBridge.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext启动JavaBridge.jarjava -jar JavaBridge.jar SERVLET:8080 3 JavaBridge.log新建一个php站点,把Java.inc放到根目录,新建index.php,index.php内容如下<?php header( 'Content-Type: text/html; charset=UTF-8' ); define("JAVA_DEBUG", true); //调试设置 define("JAVA_HOSTS", "127.0.0.1:8080"); //设置javabridge监听端口 /*0: Log nothing, not even fatal errors. 1: Log fatal system errors such as "out of memory error". 2: Log java exceptions.*/ define("JAVA_LOG_LEVEL", 2); //java.log_level: 0-6 require_once "Java.inc"; //php调用java的接口,与该脚本位于同一目录 java_set_file_encoding("UTF-8"); //设置JAVA编码。 $ob = new Java("Hello"); //实例 try{ $res = $ob->h('1333'); echo $res; } catch(Exception $e) { var_dump($e); } // 输出 1333【一些注意事项】:关于PHP-Java-Bridge的各种函数使用:1、高版本的java_require不再使用,也无法使用,由于放到java虚拟机下面,则不需要再手动引入包文件。2、java_value()用于获取值,而且必须使用该函数获取值。(特别注意:如果该值需要存入数据库,那么必须使用该java_value函数,不然会报错,或者无法存入数据库)3、java_inspect()对实例化或者方法进行print_r类似的输出。(注:请不要直接使用var_dump这样的输出方法输出java的类、方法、变量,需要使用java_inspect或者java_value,例如:var_dump(java_inspect($abc)))4、实例化使用 $test = new Java("Test")的方式,如果实例化的方法中存在参数,可以这样new Java("Test","pram")提醒:1、务必确保对java.inc的引用,确保引用正确2、务必确保对jar包放在能引用的地方,比如java虚拟机jre下面3、在PHP中调用Java使用PHP的的写法即可
2021年06月21日
58 阅读
0 评论
0 点赞
2019-08-28
PHP 中 DES 加密、解密 以及和 Java 互通
一、简介DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。密钥长度是64位(bit),超过位数密钥被忽略。所谓对称性加密即加密和解密密钥相同,对称性加密一般会按照固定长度,把待加密字符串分成块,不足一整块或者刚好最后有特殊填充字符。跨语言做 DES 加密解密经常会出现问题,往往是填充方式不对、编码不一致或者加密解密模式没有对应上造成。常见的填充模式有: pkcs5、pkcs7、iso10126、ansix923、zero。加密模式有:DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。作为一个软件开发者,可以通过工具测试 DES 加密解密,这里推荐一个在线工具:http://tool.chacuo.net/cryptdes二、实现PHP 提供了 Mcrypt 系列函数来实现 DES 的加解密,但该扩展中的函数陆续被废弃,自 PHP 7.2.0 起,会移到 PECL。所以本代码用了更通用的 OPENSSL 方式实现 DES 的加解密,具体的实现和使用代码如下: <?php class DES { /** * @var string $method 加解密方法,可通过 openssl_get_cipher_methods() 获得 */ protected $method; /** * @var string $key 加解密的密钥 */ protected $key; /** * @var string $output 输出格式 无、base64、hex */ protected $output; /** * @var string $iv 加解密的向量 */ protected $iv; /** * @var string $options */ protected $options; // output 的类型 const OUTPUT_NULL = ''; const OUTPUT_BASE64 = 'base64'; const OUTPUT_HEX = 'hex'; /** * DES constructor. * * @param string $key * @param string $method * ECB DES-ECB、DES-EDE3 (为 ECB 模式时,$iv 为空即可) * CBC DES-CBC、DES-EDE3-CBC、DESX-CBC * CFB DES-CFB8、DES-EDE3-CFB8 * CTR * OFB * @param string $output * base64、hex * @param string $iv * @param int $options */ public function __construct($key, $method = 'DES-ECB', $output = '', $iv = '', $options = OPENSSL_RAW_DATA | OPENSSL_NO_PADDING) { $this->key = $key; $this->method = $method; $this->output = $output; $this->iv = $iv; $this->options = $options; } /** * 加密 * * @param $str * @return string */ public function encrypt($str) { $str = $this->pkcsPadding($str, 8); $sign = openssl_encrypt($str, $this->method, $this->key, $this->options, $this->iv); if ($this->output == self::OUTPUT_BASE64) { $sign = base64_encode($sign); } else if ($this->output == self::OUTPUT_HEX) { $sign = bin2hex($sign); } return $sign; } /** * 解密 * * @param $encrypted * @return string */ public function decrypt($encrypted) { if ($this->output == self::OUTPUT_BASE64) { $encrypted = base64_decode($encrypted); } else if ($this->output == self::OUTPUT_HEX) { $encrypted = hex2bin($encrypted); } $sign = openssl_decrypt($encrypted, $this->method, $this->key, $this->options, $this->iv); $sign = $this->unPkcsPadding($sign); $sign = rtrim($sign); return $sign; } /** * 填充 * * @param $str * @param $blocksize * @return string */ private function pkcsPadding($str, $blocksize) { $pad = $blocksize - (strlen($str) % $blocksize); return $str . str_repeat(chr($pad), $pad); } /** * 去填充 * * @param $str * @return string */ private function unPkcsPadding($str) { $pad = ord($str{strlen($str) - 1}); if ($pad > strlen($str)) { return false; } return substr($str, 0, -1 * $pad); } }应用举例: $key = '12345678'; $iv = '66666666'; // DES CBC 加解密 $des = new DES($key, 'DES-CBC', DES::OUTPUT_BASE64, $iv); echo $base64Sign = $des->encrypt('Hello DES CBC'); // 返回 base64编码 echo "\n"; echo $des->decrypt($base64Sign); echo "\n"; // DES ECB 加解密 $des = new DES($key, 'DES-ECB', DES::OUTPUT_HEX); echo $hexSign = $des->encrypt('Hello DES ECB'); // 返回 16进制 echo "\n"; echo $des->decrypt($hexSign);
2019年08月28日
2 阅读
0 评论
0 点赞