python调用java代码

python调用java代码

python作为公认的胶水语言,调用java肯定是没有问题的,这么好玩的事情就做一个简单的例子

java源码生成jar

直接复制解密函数,将其保存为c.java

public class c {
private byte[] a = null;
private int b = 0;
private int c = 0;
private byte[] d = null;
static {
    if (a.b) {
        a.a(c.class);
    }
}
public c(String str) {
    this.d = str.getBytes();
}
private void a(byte[] bArr, int i, int i2, byte[] bArr2, int i3) {
    if (i + i2 > bArr.length) {
        throw new RuntimeException("input buffer too short");
    } else if (i3 + i2 <= bArr2.length) {
        for (int i4 = 0; i4 < i2; i4++) {
            this.b = (this.b + 1) & 255;
            byte[] bArr3 = this.a;
            int i5 = this.b;
            this.c = (bArr3[i5] + this.c) & 255;
            byte b2 = bArr3[i5];
            int i6 = this.c;
            bArr3[i5] = bArr3[i6];
            bArr3[i6] = b2;
            bArr2[i4 + i3] = (byte) (bArr3[(bArr3[i5] + bArr3[i6]) & 255] ^ bArr[i4 + i]);
        }
    } else {
        throw new RuntimeException("output buffer too short");
    }
}
private void b(byte[] bArr) {
    this.b = 0;
    this.c = 0;
    if (this.a == null) {
        this.a = new byte[256];
    }
    for (int i = 0; i < 256; i++) {
        this.a[i] = (byte) i;
    }
    int i2 = 0;
    int i3 = 0;
    for (int i4 = 0; i4 < 256; i4++) {
        byte[] bArr2 = this.a;
        i3 = ((bArr[i2] & 255) + bArr2[i4] + i3) & 255;
        byte b2 = bArr2[i4];
        bArr2[i4] = bArr2[i3];
        bArr2[i3] = b2;
        i2 = (i2 + 1) % bArr.length;
    }
}
private void a() {
    b(this.d);
}
public byte[] a(byte[] bArr) {
    a();
    byte[] bArr2 = new byte[bArr.length];
    a(bArr, 0, bArr.length, bArr2, 0);
    return bArr2;
}
}

打开cmd控制台,然后CD到c.java所在的目录,执行下面代码,将java源码转为calss文件

javac c.java

然后再执行下面代码,将class文件转为jar文件

jar cvf c.jar c.class

python通过jvm虚拟机加载jar

python调用java需要用到jpype这个库,使用pip install JPype1进行安装,然后将前面得到的c.jar复制到py文件的同目录。

在加载java类之前,先要用jpype.startJVM来启动jvm虚拟机,其中有三个参数,第一个参数是jvm的路径,默认直接使用jpype.getDefaultJVMPath(),第二和第三个参数是加载jar的路径

因为楼主没有给出成品,我也不放全部源代码了,下面是调用java的部分代码

import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=c.jar")  # 启动java虚拟机
jclass = jpype.JClass("c")  # 获取java类
C = jclass(salt)  # 实例化java对象
data = C.b(base64.b64decode(response.encode()))  # 调用对象的b方法
print(data)  # 打印解密结果
jpype.shutdownJVM()  # 卸载所有的java类,jvm虚拟机会跟随python进程结束而结束
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值