重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
程序加密?你说的是代码加密还是数据加密。我都说一下吧。
专注于为中小企业提供成都做网站、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业酉阳土家族苗族免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
Java代码加密:
这点因为Java是开源的,想达到完全加密,基本是不可能的,因为在反编译的时候,虽然反编译回来的时候可能不是您原来的代码,但是意思是接近的,所以是不行的。
那么怎么增加反编译的难度(阅读难度),那么可以采用多层继承(实现)方式来解决,这样即使反编译出来的代码,可读性太差,复用性太差了。
Java数据加密:
我们一般用校验性加密,常用的是MD5,优点是速度快,数据占用空间小。缺点是不可逆,所以我们一般用来校验数据有没有被改动等。
需要可逆,可以选用base64,Unicode,缺点是没有密钥,安全性不高。
而我们需要可逆而且采用安全的方式是:对称加密和非堆成加密,我们常用的有AES、DES等单密钥和双密钥的方式。而且是各种语言通用的。
全部手动敲字,望采纳,下面是我用Javascript方式做的一系列在线加密/解密工具:
对象是一个锁标志。按照先到先得的原则,如果有多个线程都会执行代码,并使用同一个对象作为锁,
synchronize(对象){
....
}
那么,先执行这段代码的那个线程,将会获得这个对象锁,而当这个线程执行这段代码的时候,其他线程也是使用这个对象作为锁的,就不能执行这段代码,知道最初得到这个锁的线程运行完这段代码,然后再把锁分配给下一个线程执行。
public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式没法弄,自己弄一下
}
// demol0326 的回答意思使用MyTest的实例来加锁,但是map是static的,无法锁住
// MyTest的多个实例在多个线程中的请求
//禾木双子 :如果A线程在getObject方法的第二行停止,此时B线程进入getObject后执行部分代码, 此时B线程停止,A线程启动,他不会执行'多线程处理', 仍然有线程线程安全问题,(想像一下更多的线程进入该方法的情况,num甚至会得到负值)
能。java代码右下角加锁能运行,是因为多线程共享的代码区域需要上锁,防止多线程同时访问代码块,造成线程安全问题。
Java中文件加锁机制如下:
在对文件操作过程中,有时候需要对文件进行加锁操作,防止其他线程访问该文件。对文件的加锁方法有两种:
第一种方法:使用RandomAccessFile类操作文件。
在java.io.RandomAccessFile类的open方法,提供了参数实现独占的方式打开文件:
RandomAccessFile raf = new RandomAccessFile(file, "rws");
其中的“rws”参数,rw代表读取和写入,s代表了同步方式,也就是同步锁。这种方式打开的文件,就是独占方式的。
第二种方法:使用sun.nio.FileChannel对文件进行加锁。
代码:
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
FileChannel fc = raf.getChannel();
FileLock fl = fc.tryLock();
if(fl.isValid())
System.out.println("You have got the file lock.");
以上是通过RandomAccessFile来获得文件锁的,方法如下:
代码:
FileOutputStream fos = new FileOutputStream("file.txt");
FileChannel fc = fos.getChannel(); //获取FileChannel对象
FileLock fl = fc.tryLock(); //or fc.lock();
if(null != fl)
System.out.println("You have got file lock.");
//TODO write content to file
//TODO write end, should release this lock
fl.release(); //释放文件锁
fos.close; //关闭文件写操作
如果在读文件操作的时候,对文件进行加锁,操作过程如下:
FileChannel也可以从FileInputStream中直接获得,但是这种直接获得FileChannel的对象直接去操作FileLock会报异常NonWritableChannelException,需要自己去实现getChannel方法,代码如下:
private static FileChannel getChannel(FileInputStream fin, FileDescriptor fd) {
FileChannel channel = null;
synchronized(fin){
channel = FileChannelImpl.open(fd, true, true, fin);
return channel;
}
}
其实,看FileInputStream时,发现getChannel方法与我们写的代码只有一个地方不同,即open方法的第三个参数不同,如果设置为false,就不能锁住文件了。缺省的getChannel方法,就是false,因此,不能锁住文件。