針對(duì)Java,現(xiàn)提供2種加密解決辦法:
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)大渡口免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1、HASP加密鎖提供的外殼加密工具中,有一個(gè)叫做DataHASP數(shù)據(jù)加密的功能,這個(gè)功能可以很好的防止反編譯而去掉api的調(diào)用,大家知道:硬件加密鎖的保護(hù)原理就是讓加密過(guò)的軟件和硬件緊密相連,調(diào)用不會(huì)輕易地被剔除,這樣才能持久地保護(hù)您的軟件不被盜版,同時(shí),這種方式使用起來(lái)非常簡(jiǎn)單,很容易被程序員掌握,要對(duì)一個(gè)軟件實(shí)現(xiàn)保護(hù),大約只需幾分鐘就可以了。下面簡(jiǎn)要介紹一下它的原理:
運(yùn)用HASP HL的外殼工具先把當(dāng)作一個(gè)數(shù)據(jù)文件來(lái)進(jìn)行加密處理,生成新的java程序,因?yàn)檫@個(gè)加密過(guò)程是在鎖內(nèi)完成的,并采用了128位的AES算法,這樣,加密后的java程序,無(wú)論你采用什么樣的反編譯工具,都是無(wú)法反編譯出來(lái)。您的軟件也只有被加密過(guò)的java解釋器并有加密鎖的情況下才能正常運(yùn)行,如果沒(méi)有加密鎖,程序不能運(yùn)行,從而達(dá)到真正保護(hù)您的軟件的目的,該方法只支持Windows平臺(tái)。
2、HASP提供專(zhuān)門(mén)針對(duì)java外殼加密工具,直接加密jar或war包,防止反編譯,目前支持J2SE,J2EE主要支持容器為T(mén)OMCAT6.0以上,可在Windows和Linux平臺(tái)下運(yùn)行,如果情況適合則是最簡(jiǎn)單的使用方法。
Java基本的單向加密算法:
1.BASE64 嚴(yán)格地說(shuō),屬于編碼格式,而非加密算法
2.MD5(Message Digest algorithm 5,信息摘要算法)
3.SHA(Secure Hash Algorithm,安全散列算法)
4.HMAC(Hash Message Authentication Code,散列消息鑒別碼)
按 照RFC2045的定義,Base64被定義為:Base64內(nèi)容傳送編碼被設(shè)計(jì)用來(lái)把任意序列的8位字節(jié)描述為一種不易被人直接識(shí)別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見(jiàn)于郵件、http加密,截取http信息,你就會(huì)發(fā)現(xiàn)登錄操作的用戶(hù)名、密碼字段通過(guò)BASE64加密的。
主要就是BASE64Encoder、BASE64Decoder兩個(gè)類(lèi),我們只需要知道使用對(duì)應(yīng)的方法即可。另,BASE加密后產(chǎn)生的字節(jié)位數(shù)是8的倍數(shù),如果不夠位數(shù)以=符號(hào)填充。
MD5
MD5 -- message-digest algorithm 5 (信息-摘要算法)縮寫(xiě),廣泛用于加密和解密技術(shù),常用于文件校驗(yàn)。校驗(yàn)?不管文件多大,經(jīng)過(guò)MD5后都能生成唯一的MD5值。好比現(xiàn)在的ISO校驗(yàn),都 是MD5校驗(yàn)。怎么用?當(dāng)然是把ISO經(jīng)過(guò)MD5后產(chǎn)生MD5的值。一般下載linux-ISO的朋友都見(jiàn)過(guò)下載鏈接旁邊放著MD5的串。就是用來(lái)驗(yàn)證文 件是否一致的。
HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基于密鑰的Hash算法的認(rèn)證協(xié)議。消息鑒別碼實(shí)現(xiàn)鑒別的原理是,用公開(kāi)函數(shù)和密鑰產(chǎn)生一個(gè)固定長(zhǎng)度的值作為認(rèn)證標(biāo)識(shí),用這個(gè) 標(biāo)識(shí)鑒別消息的完整性。使用一個(gè)密鑰生成一個(gè)固定大小的小數(shù)據(jù)塊,即MAC,并將其加入到消息中,然后傳輸。接收方利用與發(fā)送方共享的密鑰進(jìn)行鑒別認(rèn)證 等。
如果你說(shuō)的是文本加密,有很多方法,自己也可以寫(xiě)個(gè)字符變換程序
如果是代碼加密,沒(méi)用的,java就是開(kāi)源。
你藏再厲害,編譯+反編譯,干凈的源碼就出來(lái)了
只給編譯后的.jar文件,不給.java文件
不過(guò)要說(shuō)明的是,java因?yàn)槭亲止?jié)碼,所以沒(méi)有辦法防止被反編譯。
最多也就是做一下代碼混淆,比如把方法或變量名改成無(wú)意義的名稱(chēng),或者加一些完全無(wú)用的代碼進(jìn)去,讓惡意攻擊的人難以看懂
md5加密:
package com.ncs.pki.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Test {
private static MessageDigest digest = null;
public synchronized static final String hash(String data) {
if (digest == null) {
try {
digest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsae) {
System.err.println(
"Failed to load the MD5 MessageDigest. "
+ "Jive will be unable to function normally.");
nsae.printStackTrace();
}
}
// Now, compute hash.
digest.update(data.getBytes());
return encodeHex(digest.digest());
}
public static final String encodeHex(byte[] bytes) {
StringBuffer buf = new StringBuffer(bytes.length * 2);
int i;
for (i = 0; i bytes.length; i++) {
if (((int) bytes[i] 0xff) 0x10) {
buf.append("0");
}
buf.append(Long.toString((int) bytes[i] 0xff, 16));
}
return buf.toString();
}
public static String test(){
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(MD5Test.hash("123456"));
}
}
3des加密:
package com.ncs.pki.util;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class DesEncrypt {
/**
*
* 使用DES加密與解密,可對(duì)byte[],String類(lèi)型進(jìn)行加密與解密 密文可使用String,byte[]存儲(chǔ).
*
* 方法: void getKey(String strKey)從strKey的字條生成一個(gè)Key
*
* String getEncString(String strMing)對(duì)strMing進(jìn)行加密,返回String密文 String
* getDesString(String strMi)對(duì)strMin進(jìn)行解密,返回String明文
*
*byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[]
* byteD)byte[]型的解密
*/
Key key;
/**
* 根據(jù)參數(shù)生成KEY
*
* @param strKey
*/
public void getKey(String strKey) {
try {
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator = null;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密String明文輸入,String密文輸出
*
* @param strMing
* @return
*/
public String getEncString(String strMing) {
byte[] byteMi = null;
byte[] byteMing = null;
String strMi = "";
BASE64Encoder base64en = new BASE64Encoder();
try {
byteMing = strMing.getBytes("UTF8");
byteMi = this.getEncCode(byteMing);
strMi = base64en.encode(byteMi);
} catch (Exception e) {
e.printStackTrace();
} finally {
base64en = null;
byteMing = null;
byteMi = null;
}
return strMi;
}
/**
* 解密 以String密文輸入,String明文輸出
*
* @param strMi
* @return
*/
public String getDesString(String strMi) {
BASE64Decoder base64De = new BASE64Decoder();
byte[] byteMing = null;
byte[] byteMi = null;
String strMing = "";
try {
byteMi = base64De.decodeBuffer(strMi);
byteMing = this.getDesCode(byteMi);
strMing = new String(byteMing, "UTF8");
} catch (Exception e) {
e.printStackTrace();
} finally {
base64De = null;
byteMing = null;
byteMi = null;
}
return strMing;
}
/**
* 加密以byte[]明文輸入,byte[]密文輸出
*
* @param byteS
* @return
*/
private byte[] getEncCode(byte[] byteS) {
byte[] byteFina = null;
Cipher cipher;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byteFina = cipher.doFinal(byteS);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
/**
* 解密以byte[]密文輸入,以byte[]明文輸出
*
* @param byteD
* @return
*/
private byte[] getDesCode(byte[] byteD) {
Cipher cipher;
byte[] byteFina = null;
try {
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key);
byteFina = cipher.doFinal(byteD);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
public static void main(String[] args) {
System.out.println("des demo");
DesEncrypt des = new DesEncrypt();// 實(shí)例化一個(gè)對(duì)像
des.getKey("MYKEY");// 生成密匙
System.out.println("key=MYKEY");
String strEnc = des.getEncString("111111");// 加密字符串,返回String的密文
System.out.println("密文=" + strEnc);
String strDes = des.getDesString(strEnc);// 把String 類(lèi)型的密文解密
System.out.println("明文=" + strDes);
}
}
都看不到的,
java程序分為:
編輯
編譯
解釋
運(yùn)行
運(yùn)行的都是.class字節(jié)碼文件,看不到源文件的,你不用操心
采納即可
網(wǎng)頁(yè)名稱(chēng):如何做java源代碼加密 java編譯加密
文章起源:http://jinyejixie.com/article44/dodpghe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、域名注冊(cè)、網(wǎng)頁(yè)設(shè)計(jì)公司、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)