13.java整合dll库

1.resources目录

把可执行的dll库放在resources目录下,会优先从该目录下加载文件

2.pom.xml

JNA(Java Native Access)是一个基于JNI技术的Java开源框架,提供工具类实现动态调用系统本地库的功能,开发者无需编写Native/JNI代码即可完成跨平台本地方法调用。通过创建继承自类的接口并加载动态链接库(DLL/SO),可声明并调用库中的方法。

        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.15.0</version>
        </dependency>

3.具体封装工具类

public class UseDllUtil {


    public interface Dll extends Library {

        public static Dll instance = (Dll) Native.loadLibrary("CryptoXLib", Dll.class);
        public int Trans_Data_Protect(Pointer ucObjectType, int iDivisorLen, Pointer ucDivisorData, int iInLen, Pointer ucInData, Pointer ucExternData, IntByReference iOutLen, Pointer ucOutData, Pointer cErrTxt);
        public int Trans_Data_SHA1(Pointer ucObjectType,int iInLen,Pointer ucInData,Pointer ucOutData,Pointer cErrTxt);
        public int Trans_Data_BCDTOAN(int iInLen,Pointer ucInData,Pointer ucOutData,Pointer cErrTxt);
        public int Trans_Data_ANTOBCD(int iKeyLen,Pointer pDataKey,Pointer pKey,Pointer cErrTxt);
        public int Triple_DES_ECB(Pointer ucObjectType,Pointer ucIVData,int iDataLen,Pointer ucInData,int iLen,Pointer pKey,Pointer ucDecryptedData,Pointer cErrTxt);
    }

    public static String GetEncryptedCardNo(String bkCode, String bCode){
        String bkCodeNew;

        //卡号或者身份证号加密
        Pointer ucObjectType=new Memory(4);
        //ucObjectType.clear(4);
        ucObjectType.setByte(0,new Byte("00"));

        Pointer ucDivisorData=new Memory(1024);
        ucDivisorData.setString(0,bCode);

        Pointer ucInData=new Memory(1024);
        ucInData.setString(0,bkCode);

        Pointer ucExternData=new Memory(1024);
        ucExternData.setString(0,"");

        Pointer ucOutData=new Memory(1024);
        ucOutData.setString(0,"");

        Pointer cErrTxt=new Memory(1024);
        cErrTxt.setString(0,"");

        IntByReference iOutLen=new IntByReference();
        iOutLen.setValue(0);

        UseDllUtil.Dll.instance.Trans_Data_Protect(ucObjectType,bCode.length(),ucDivisorData,bkCode.length(),ucInData,ucExternData,iOutLen,ucOutData,cErrTxt);
        bkCodeNew=ucOutData.getString(0);

        System.out.println(bkCodeNew);
        return bkCodeNew;
    }

    public static String decryptPassword(String bkCode, String bCode) {
        String bkCodeNew;

        //卡号或者身份证号加密
        Pointer ucObjectType=new Memory(4);
        //ucObjectType.clear(4);
        ucObjectType.setByte(0,new Byte("01"));

        Pointer ucDivisorData=new Memory(1024);
        ucDivisorData.setString(0,bCode);

        Pointer ucInData=new Memory(1024);
        ucInData.setString(0,bkCode);

        Pointer ucExternData=new Memory(1024);
        ucExternData.setString(0,"");

        Pointer ucOutData=new Memory(1024);
        ucOutData.setString(0,"");

        Pointer cErrTxt=new Memory(1024);
        cErrTxt.setString(0,"");

        IntByReference iOutLen=new IntByReference();
        iOutLen.setValue(0);

        UseDllUtil.Dll.instance.Trans_Data_Protect(ucObjectType,bCode.length(),ucDivisorData,bkCode.length(),ucInData,ucExternData,iOutLen,ucOutData,cErrTxt);
        bkCodeNew=ucOutData.getString(0);

        System.out.println(bkCodeNew);
        return bkCodeNew;
    }
}

将dll的调用与加解密方法直接封装起来调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值