JNI的使用和硬件绑定

一体机硬件绑定的原理及应用

一、案例描述

由于市场上的需要,需要开发一体机项目,将平台安装部署在硬件中,一起打包出售。在开发过程中遇到一个难题,怎么保证平台不被复用,怎么保证license的安全。在讨论的过程中,我们提出一种解决方法,将平台与一体机绑定,做license时,只给最少的权限。

二、背景技术及术语解释

 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。

三、解决过程

1、 编写java代码

在项目中书写编写自己的代码,使用native关键字声明需要调用的方法。例如:


2、 编译java代码

在运行中输入cmd,进入代码的当前目录,输入JavacEnvironmentTools.java 生成EnvironmentTools.class

3、 创建.h文件

在第二步操作框中返回到com的父文件夹,输入javah com.hik.lrms.common.EnvironmentTools,生成com_hik_lrms_common_EnvironmentTools.h文件。


4、 编写实现代码并生成so文件

将第三部生成的.h文件提供给C/C++的开发人员,由他们完成方法实现并生成.so文件(windows系统则生成dll文件)。

5、 运行java程序
在调用前先要执行System.loadLibrary("encrypt");(注意实际so文件前面需要加lib,即libencrypt,加载时需去除lib)

将so文件上传至linux系统的/home目录下,并在/etc/profile中设置路径(export LD_LIBRARY_PATH=/home),然后运行java程序。

6、 注意事项

由于开发环境不在linux系统,调试很麻烦,建议将readEnvironMent()读取到的信息,打印到日志,方便调试。由于使用native关键字,当方法未调用到时,程序会抛出error而不是Exception,捕获时需使用error。

 

4、总结

之前系统做了另外一种硬件绑定方法,由硬件组开发一个驱动,这个驱动开机自启动将硬件信息写入一个文件中,java程序去解析这个文件。这种做法带来一个问题,不够安全。1、硬件信息属于机密,不能被用户随意获取。2、当用户知道这个文件时,可以复制,达不到硬件绑定的目的。基于上面两种因素,我们使用JNI,调用C的接口获取硬件信息。这种方式带来的问题就是,不能够跨平台。当windows系统也要做硬件绑定时,只能重新开发。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值