import java.io.BufferedReader
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.InputStreamReader
import java.nio.channels.FileLock
/**
* 文件加锁
* @author wangjian
*/
public class LockTester {
public static void main(String[] args) throws Exception{
//加上true参闷锋态数,不会重新生成一个新的文件。
FileOutputStream fos = new FileOutputStream("d:/a.txt",true)
FileLock fl = fos.getChannel().tryLock()
new ReadLockedFile().start() //试图读取,不成功。
if(fl!=null){
System.err.println("文件已经锁定..")
System.err.println(fl.isShared())
Thread.sleep(1000*60) //锁定1分蚂源钟
fl.release() //解除锁定
System.err.println("解除锁定..")
}
}
}
/**
* 用另一个线程读取已经锁基败定的文件。
*/
class ReadLockedFile extends Thread{
public void run(){
try{
BufferedReader br =
new BufferedReader(new InputStreamReader(new FileInputStream("d:/a.txt")))
String str = br.readLine()
while(str!=null){
System.err.println(str)
str = br.readLine()
}
br.close()
}catch(Exception e){
e.printStackTrace()
}
}
}
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序正物很容易被人复制而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办举亏液法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作空档用了,但是现在到底有没有好的办法呢?
以色列阿拉丁公司提供的*** HL加密锁提供的外壳加密工具中有一个叫做数据加密的功能,这个功能能更好的防止去除api的调用,各位都知道:硬件加密锁的保护原理就是要您被加密过的软件和加密锁的硬件要紧紧地结合在一起,而且不容易被轻易的剔出原来的调用,这样才能更好的保证您的软件不被盗版,同时这种方式也很容易被程序员掌握,要对一个软件实现保护,只需要几分钟的时间就可以了,下面简单介绍一下他的原理:
运用阿拉丁公司提供的外壳工具先把调用您的java解释器来进行加密,那么就是说如果要运用这个解释器就需要有一把特定的加密锁存在,然后我们再运用它提供的外壳加密工具中的内容加密,把您写好的java程序当作一个文件来处理而对他进行加密,这个加密是采用的AES128位的算法的,这样这个加密过的数据文件??您的软件就只能被您保护过的java解释器来进行解释,但是在没有加密锁的情况下就不能够运行您的软件,从而达到真正保护您的软件的目的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)