Ubuntu18 + laravel + JavaBridge + 招行国密加解密

一、Java 环境安装

1.1直接输入java 根据提示进行安装 

sudo apt install openjdk-8-jre-headless

 ps:踩过的坑:根据其他教程下载java环境包进行安装,启用JavaBridge时java.ext.dirs为null

1.2输入java、javac出现下图即为安装成功

1.3查看版本java -version

二、下载JavaBridge

2.1下载

等待几秒即可自动下载 下载地址(7.2.1)

附上官网点击访问

2.2启动

将其放到/usr/local/src中(位置根据自己需要来放置),进入到目录中开启

java -jar JavaBridge.jar HTTP_LOCAL:8080&

2.3出现下图即为启动成功

2.4此时需要讲招行提供的java包放入到java.ext.dirs所提示的文件夹下

选中的四个即为招行加解密java包

2.5重启

放入文件之后重启JavaBridge

lsof -i:8080
kill -9 xxx

2.6访问

开启成功访问localhost:8080 (这里是用的是curl)

三、在laravel框架中使用加解密

3.1将两个文件放入laravel的public目录

3.2测试

运行cmbdc.php出现一串base64后的字符串即为成功

php cmbdc.php

 下面为测试代码,仅供参考

<?php
require_once("Java.inc");
$here=realpath(dirname($_SERVER["SCRIPT_FILENAME"]));
function strToByte($str) {
    return array_slice(unpack("C*", "\0".$str), 1);
}
function byteToStr($bytes) { 
    $str = ''; 
    foreach($bytes as $ch) { 
        $str .= chr($ch); 
    } 
    return $str; 
} 

echo '<meta charset="UTF-8">';

$privkey = "";//私钥
$id_iv = "";//id
$source = "hello world!"; //utf-8

$cryptor = new Java("dc.demo.DCCryptor");
$signed = $cryptor->CMBSM2SignWithSM3(strToByte($id_iv), base64_decode($privkey), strToByte($source));
print base64_encode($signed)


?>

3.3在laravel中引入Java.inc需要注意:

require_once '你的项目地址/public/Java.inc';

 需要绝对地址,否则laravel会报错

Symfony\Component\Debug\Exception\FatalErrorException: main(): Failed opening required 'Java.inc' (include_path='.:/usr/share/php') in /var/www/html/larave/app/Http/Controller/ZSYH/TestController.php:13
Stack trace:

3.4在laravel中使用加解密方法

// 生成签名
$cryptor = new \Java("dc.demo.DCCryptor");
$sign = $cryptor->CMBSM2SignWithSM3('id',base64_decode('私钥'),'内容');//id和内容需要转为Byte
//加密
$encrypt = $cryptor->CMBSM4EncryptWithCBC('SM4秘钥','id',json_encode('内容',JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));//id和内容需要转为Byte
秘钥:base64_encode($encrypt);
//解密
$decrypt = $cryptor->CMBSM4EncryptWithCBC('SM4秘钥','id',base64_decode('内容'));//id需要转为Byte
解密内容:json_decode(decrypt);

3.5招行demo地址(里面有详细的操作,可供参考)

国密Demo(下载) 查看PHP的内容就可以了

四、总结

        一开始搭java环境踩了很多坑,用java包直接安装环境会导致JavaBridge中关键的引用地址为null。所以用Ubuntu的apt安装省去了很多步骤,又能够适配JavaBridge。在laravel中new Java前面要加\,否则会报找不到JAVA类。引用Java.inc时也需要写上绝对路径,不然其他的访问会造成找不到此文件。

        mark:在同一类中加密能够正常使用,解密的话会报错,我是新开了一个类来负责解密。希望有大佬能够指点一二,有想法的朋友在评论区讨论下。

local.ERROR: ErrorException: Unchecked exception detected: [[o:Response$UndeclaredThrowableErrorMarker]:"FATAL: Undeclared java.lang.RuntimeException detected. java.lang.Exception: Invoke failed: [[o:JavaBridge]]->offsetGet((o:Object)[o:array_of_B], (o:Object)[o:String]). Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number VM: 1.8.0_342@http://java.oracle.com/" at:
#-14 php.java.bridge.JavaBridge.offsetGet(JavaBridge.java:1878)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奶派三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值