只給編譯后的.jar文件,不給.java文件
創(chuàng)新互聯(lián)建站一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!為您提供網(wǎng)站設(shè)計制作、成都網(wǎng)站制作、成都網(wǎng)頁設(shè)計、重慶小程序開發(fā)公司、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、app開發(fā)定制是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計公司,等你一起來見證!
不過要說明的是,java因為是字節(jié)碼,所以沒有辦法防止被反編譯。
最多也就是做一下代碼混淆,比如把方法或變量名改成無意義的名稱,或者加一些完全無用的代碼進去,讓惡意攻擊的人難以看懂
可以的,但是對jar包直接加密,目前只支持J2SE,還不支持J2EE。更多的還是用混編器(java obfuscator)。下面是關(guān)于HASP的介紹。
-----------------------------------------------------
針對java加密防止反編譯的解決方案
眾所周知,java開發(fā)語言提供了很方便的開發(fā)平臺,開發(fā)出來的程序很容易在不同的平臺上被移植,現(xiàn)在越來越多的人使用它來開發(fā)軟件,與.net語言并駕齊驅(qū)。
Java有它方便的一面,同時也給開發(fā)者帶來了一個不小的煩惱,就是保護程序代碼變得困難,因為java語言編譯和代碼執(zhí)行的特殊性,目前,除了HASP外,還沒有一個更好的解決辦法或保護方案,但如果不采取有力的措施,則自己辛辛苦苦開發(fā)出來的程序很容易被人復(fù)制而據(jù)為己有,一般情況下,大多數(shù)的人都是用混編器(java obfuscator)來把開發(fā)出來的程序進行打亂,以想達到防止反編譯的目的,但是,這種方法在網(wǎng)上很容易找到相關(guān)的軟件來重新整理,那么這個混編器工具也只能控制一些本來就沒有辦法的人,而對于稍懂工具的人幾乎是透明的,沒有任何意義。再說硬件加密鎖,大多數(shù)廠商提供的加密鎖只能進行dll的連接或簡單的api調(diào)用,只要簡單地反編譯,就很容易把api去掉,這樣加密鎖根本起不了作用,那到底是否還有更好的解決辦法呢?
現(xiàn)提供2種解決辦法:
1、以色列阿拉丁公司的HASP HL加密鎖提供的外殼加密工具中,有一個叫做數(shù)據(jù)加密的功能,這個功能可以很好的防止反編譯而去掉api的調(diào)用,大家知道:硬件加密鎖的保護原理就是讓加密過的軟件和硬件緊密地連接在一起,調(diào)用不會輕易地被剔除,這樣才能持久地保護您的軟件不被盜版,同時,這種方式使用起來非常簡單,很容易被程序員掌握,要對一個軟件實現(xiàn)保護,大約只需幾分鐘的時間就可以了,下面簡單介紹一下它的原理:
運用HASP HL的外殼工具先把java解釋器進行加密,那么,如果要啟動這個解釋器就需要有特定的加密鎖存在,然后,再運用外殼工具中的數(shù)據(jù)加密功能把java程序(CLASS或JAR包)當(dāng)作一個數(shù)據(jù)文件來進行加密處理,生成新的java程序(CLASS或JAR包),因為這個加密過程是在鎖內(nèi)完成的,并采用了128位的AES算法,這樣,加密后的java程序,無論你采用什么樣的反編譯工具,都是無法反編譯出來的。您的軟件也只有被加密過的java解釋器并有加密鎖的情況下才能正常運行,如果沒有加密鎖,程序不能運行,從而達到真正保護您的軟件的目的。
2、HASP HL提供專門針對java外殼加密工具,直接加密jar包,防止外編譯,目前只支持J2SE,將來會進一步支持J2EE,如果情況適合則是最簡單的方法。
基本的單向加密算法:
BASE64 嚴格地說,屬于編碼格式,而非加密算法
MD5(Message Digest algorithm 5,信息摘要算法)
SHA(Secure Hash Algorithm,安全散列算法)
HMAC(Hash Message Authentication Code,散列消息鑒別碼)
復(fù)雜的對稱加密(DES、PBE)、非對稱加密算法:
DES(Data Encryption Standard,數(shù)據(jù)加密算法)
PBE(Password-based encryption,基于密碼驗證)
RSA(算法的名字以發(fā)明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
DH(Diffie-Hellman算法,密鑰一致協(xié)議)
DSA(Digital Signature Algorithm,數(shù)字簽名)
ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學(xué))
代碼參考:
/**
*?BASE64加密
*
*?@param?key
*?@return
*?@throws?Exception
*/
public?static?String?encryptBASE64(byte[]?key)?throws?Exception?{
return?(new?BASE64Encoder()).encodeBuffer(key);
}
/**
*?MD5加密
*
*?@param?data
*?@return
*?@throws?Exception
*/
public?static?byte[]?encryptMD5(byte[]?data)?throws?Exception?{
MessageDigest?md5?=?MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return?md5.digest();
}
/**
*?SHA加密
*
*?@param?data
*?@return
*?@throws?Exception
*/
public?static?byte[]?encryptSHA(byte[]?data)?throws?Exception?{
MessageDigest?sha?=?MessageDigest.getInstance(KEY_SHA);
sha.update(data);
return?sha.digest();
}
}
/**
*?初始化HMAC密鑰
*
*?@return
*?@throws?Exception
*/
public?static?String?initMacKey()?throws?Exception?{
KeyGenerator?keyGenerator?=?KeyGenerator.getInstance(KEY_MAC);
SecretKey?secretKey?=?keyGenerator.generateKey();
return?encryptBASE64(secretKey.getEncoded());
}
/**
*?HMAC加密
*
*?@param?data
*?@param?key
*?@return
*?@throws?Exception
*/
public?static?byte[]?encryptHMAC(byte[]?data,?String?key)?throws?Exception?{
SecretKey?secretKey?=?new?SecretKeySpec(decryptBASE64(key),?KEY_MAC);
Mac?mac?=?Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return?mac.doFinal(data);
}
當(dāng)前名稱:java代碼加密編譯,java代碼加密運行
網(wǎng)站路徑:http://jinyejixie.com/article32/dssdppc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、手機網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計、網(wǎng)站改版、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)