程序加密?你說(shuō)的是代碼加密還是數(shù)據(jù)加密。我都說(shuō)一下吧。
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)酉陽(yáng)土家族苗族免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Java代碼加密:
這點(diǎn)因?yàn)镴ava是開(kāi)源的,想達(dá)到完全加密,基本是不可能的,因?yàn)樵诜淳幾g的時(shí)候,雖然反編譯回來(lái)的時(shí)候可能不是您原來(lái)的代碼,但是意思是接近的,所以是不行的。
那么怎么增加反編譯的難度(閱讀難度),那么可以采用多層繼承(實(shí)現(xiàn))方式來(lái)解決,這樣即使反編譯出來(lái)的代碼,可讀性太差,復(fù)用性太差了。
Java數(shù)據(jù)加密:
我們一般用校驗(yàn)性加密,常用的是MD5,優(yōu)點(diǎn)是速度快,數(shù)據(jù)占用空間小。缺點(diǎn)是不可逆,所以我們一般用來(lái)校驗(yàn)數(shù)據(jù)有沒(méi)有被改動(dòng)等。
需要可逆,可以選用base64,Unicode,缺點(diǎn)是沒(méi)有密鑰,安全性不高。
而我們需要可逆而且采用安全的方式是:對(duì)稱加密和非堆成加密,我們常用的有AES、DES等單密鑰和雙密鑰的方式。而且是各種語(yǔ)言通用的。
全部手動(dòng)敲字,望采納,下面是我用Javascript方式做的一系列在線加密/解密工具:
對(duì)象是一個(gè)鎖標(biāo)志。按照先到先得的原則,如果有多個(gè)線程都會(huì)執(zhí)行代碼,并使用同一個(gè)對(duì)象作為鎖,
synchronize(對(duì)象){
....
}
那么,先執(zhí)行這段代碼的那個(gè)線程,將會(huì)獲得這個(gè)對(duì)象鎖,而當(dāng)這個(gè)線程執(zhí)行這段代碼的時(shí)候,其他線程也是使用這個(gè)對(duì)象作為鎖的,就不能執(zhí)行這段代碼,知道最初得到這個(gè)鎖的線程運(yùn)行完這段代碼,然后再把鎖分配給下一個(gè)線程執(zhí)行。
public Object getObject(String key,Object o) {
synchronized (map) {
if(map.get(key)==null) {
map.put(key,o)
}else {
return map.get(key);
}}// 格式?jīng)]法弄,自己弄一下
}
// demol0326 的回答意思使用MyTest的實(shí)例來(lái)加鎖,但是map是static的,無(wú)法鎖住
// MyTest的多個(gè)實(shí)例在多個(gè)線程中的請(qǐng)求
//禾木雙子 :如果A線程在getObject方法的第二行停止,此時(shí)B線程進(jìn)入getObject后執(zhí)行部分代碼, 此時(shí)B線程停止,A線程啟動(dòng),他不會(huì)執(zhí)行'多線程處理', 仍然有線程線程安全問(wèn)題,(想像一下更多的線程進(jìn)入該方法的情況,num甚至?xí)玫截?fù)值)
能。java代碼右下角加鎖能運(yùn)行,是因?yàn)槎嗑€程共享的代碼區(qū)域需要上鎖,防止多線程同時(shí)訪問(wèn)代碼塊,造成線程安全問(wèn)題。
Java中文件加鎖機(jī)制如下:
在對(duì)文件操作過(guò)程中,有時(shí)候需要對(duì)文件進(jìn)行加鎖操作,防止其他線程訪問(wèn)該文件。對(duì)文件的加鎖方法有兩種:
第一種方法:使用RandomAccessFile類操作文件。
在java.io.RandomAccessFile類的open方法,提供了參數(shù)實(shí)現(xiàn)獨(dú)占的方式打開(kāi)文件:
RandomAccessFile raf = new RandomAccessFile(file, "rws");
其中的“rws”參數(shù),rw代表讀取和寫(xiě)入,s代表了同步方式,也就是同步鎖。這種方式打開(kāi)的文件,就是獨(dú)占方式的。
第二種方法:使用sun.nio.FileChannel對(duì)文件進(jìn)行加鎖。
代碼:
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.");
以上是通過(guò)RandomAccessFile來(lái)獲得文件鎖的,方法如下:
代碼:
FileOutputStream fos = new FileOutputStream("file.txt");
FileChannel fc = fos.getChannel(); //獲取FileChannel對(duì)象
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; //關(guān)閉文件寫(xiě)操作
如果在讀文件操作的時(shí)候,對(duì)文件進(jìn)行加鎖,操作過(guò)程如下:
FileChannel也可以從FileInputStream中直接獲得,但是這種直接獲得FileChannel的對(duì)象直接去操作FileLock會(huì)報(bào)異常NonWritableChannelException,需要自己去實(shí)現(xiàn)getChannel方法,代碼如下:
private static FileChannel getChannel(FileInputStream fin, FileDescriptor fd) {
FileChannel channel = null;
synchronized(fin){
channel = FileChannelImpl.open(fd, true, true, fin);
return channel;
}
}
其實(shí),看FileInputStream時(shí),發(fā)現(xiàn)getChannel方法與我們寫(xiě)的代碼只有一個(gè)地方不同,即open方法的第三個(gè)參數(shù)不同,如果設(shè)置為false,就不能鎖住文件了。缺省的getChannel方法,就是false,因此,不能鎖住文件。
當(dāng)前題目:Java給代碼加鎖 java方法加鎖
當(dāng)前地址:http://www.chinadenli.net/article6/hpgdog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、軟件開(kāi)發(fā)、全網(wǎng)營(yíng)銷(xiāo)推廣、服務(wù)器托管、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容