導航:首頁 > 文檔加密 > 加密java框架

加密java框架

發布時間:2025-06-05 13:32:46

1. 如何用java進行3DES加密解密

3DES加密解密的核心在於其演算法設計。3DES即Triple DES,是一種基於DES演算法的加密方法。其主要特點是使用三個不同的密鑰,通過三次DES加密過程實現更高的安全性。

在Java中,3DES加密解密的實現步驟如下:

1. 首先定義加密演算法為"DESede"。

2. 使用SecretKeySpec生成密鑰,密鑰長度為24位元組。

3. 創建Cipher實例,並初始化為加密或解密模式。

4. 使用doFinal方法進行加密或解密操作。

下面是一個具體的3DES加密解密Java代碼示例:

java

package com.nnff.des;

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class ThreeDes {

private static final String Algorithm = "DESede";

public static byte[] encryptMode(byte[] keybyte, byte[] src) {

try {

SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

Cipher c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.ENCRYPT_MODE, deskey);

return c1.doFinal(src);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static byte[] decryptMode(byte[] keybyte, byte[] src) {

try {

SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

Cipher c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE, deskey);

return c1.doFinal(src);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static String byte2Hex(byte[] b) {

String hs = "";

String stmp = "";

for (int n = 0; n < b.length; n++) {

stmp = (Integer.toHexString(b[n] & 0XFF));

if (stmp.length() == 1) {

hs = hs + "0" + stmp;

} else {

hs = hs + stmp;

}

}

return hs.toUpperCase();

}

public static void main(String[] args) {

Security.addProvider(new com.sun.crypto.provider.SunJCE());

final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36, (byte) 0xE2};

String szSrc = "This is a 3DES test. 測試";

System.out.println("加密前的字元串:" + szSrc);

byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());

System.out.println("加密後的字元串:" + new String(encoded));

byte[] srcBytes = decryptMode(keyBytes, encoded);

System.out.println("解密後的字元串:" + (new String(srcBytes)));

}

}

在這個示例中,我們使用了一個24位元組的密鑰進行加密和解密操作。

通過上述代碼,我們可以實現3DES加密和解密功能。

2. JAVA程序加密,怎麼做才安全急

眾所周知,java為開發語言提供了很方便的開發平台,但開發出來的程序很容易在不同的平台上面被移植,現在越來越多的人使用它開發軟體。
Java有它方便的一個方面,但它同時也帶給了開發者一個煩惱,這就是保護的辦法不多,而且大多數不是很好用,這樣自己辛苦開發出來的程序很容易被人復制而據為己有,一般情況下,大多數的人都是用混編器(java obfuscator)來把開發出來的程序進行打亂以達到沒有辦法來反編譯觀看源代碼,但是這種辦法在網上很容易找到相關的軟體來重新整理,那麼這個混編只能控制一些本來也沒有辦法動您的軟體的人,而對於一些掌握工具的人幾乎是透明的,還有就是利用硬體加密鎖,但大多數公司提供的硬體加密鎖只是提供了一些dll的連接或簡單的api調用,只要反編譯他們,就很容易把一些api調用去掉,這樣硬體加密鎖也就不起作用了,但是現在到底有沒有更好的辦法呢?
以色列阿拉丁公司提供的HASP HL加密鎖提供的外殼加密工具中有一個叫做數據加密的功能,這個功能就能很好的防止去除api的調用,各位都知道:硬體加密鎖的保護原理就是要你被加密過的軟體和加密鎖的硬體要緊緊地結合在一起,而且不容易被輕易的剔出原來的調用,這樣才能很好的保證您的軟體不被盜版,同時這種方式也很容易被程序員掌握,要對一個軟體實現保護,大約只需要幾分鍾的時間就可以了,下面簡單介紹一下他的原理:
運用阿拉丁公司提供的外殼工具先把調用你的java解釋器來進行加密,那麼就是說如果要運用這個解釋器就需要有一把特定的加密鎖存在,然後我們再運用它提供的外殼加密工具中的內容加密把你寫好的java程序當作一個文件來處理而對他進行加密,這個加密是採用的AES128位的演算法的,這樣這個加密過的數據文件——您的軟體就只能被您的保護過的java解釋器來進行解釋,但是如果沒有加密鎖就不能夠運行您的軟體,從而達到真正保護您的軟體的目的。

3. 如何用JAVA實現字元串簡單加密解密

Java中可以使用多種加密演算法來加密字元串,例如DES演算法。下面通過一個示例來展示如何使用Java實現字元串的加密和解密。

首先,我們需要創建一個密鑰。這可以通過調用`KeyGenerator`類的`getInstance`方法來實現。這里我們以DES演算法為例:

KeyGenerator keygen = KeyGenerator.getInstance("DES");

接下來,我們需要初始化`KeyGenerator`對象,並生成一個密鑰:

keygen.init(512);

使用生成的密鑰進行加密操作。這里我們定義一個方法`encryptToDES`,接受一個密鑰和要加密的信息,返回加密後的信息:

public String encryptToDES(SecretKey key, String info) { ... }

解密操作則通過另一個方法`decryptByDES`來實現,該方法接受密鑰和要解密的密文,返回解密後的信息:

public String decryptByDES(SecretKey key, String sInfo) { ... }

此外,還可以使用其他加密演算法,如MD5和SHA-1。這里提供一個MD5加密方法`encryptToMD5`:

public String encryptToMD5(String info) { ... }

以及一個SHA-1加密方法`encryptToSHA`:

public String encryptToSHA(String info) { ... }

通過這些方法,我們可以方便地對字元串進行加密和解密操作。同時,還可以使用公鑰和私鑰進行數字簽名和驗證,確保信息的完整性和安全性。

示例代碼中還包含了一些輔助方法,如將二進制轉化為16進制字元串`byte2hex`,以及將十六進制字元串轉化為二進制`hex2byte`。這些方法在加密和解密過程中起到了關鍵作用。

通過上述方法,我們可以靈活地在Java中實現字元串的加密和解密,確保數據的安全傳輸和存儲。

4. shiro是什麼

Shiro是Apache旗下一個強大的Java安全框架,主要用於實現用戶身份認證、許可權授權、加密和會話管理等功能

主要功能

核心組件

總之,Shiro是一個功能強大且易於使用的Java安全框架,它通過提供身份認證、許可權授權、加密和會話管理等功能,幫助開發人員構建安全的應用程序。

5. 如何用java語言對即時通訊軟體進行加密

一、Java軟體加密基本思路
對於應用軟體的保護筆者從兩個方面進行考慮,第一是阻止盜版使用軟體,第二是阻止競爭對手對軟體反編譯,即阻止對軟體的逆向工程。
1、阻止盜版
在軟體運行時對自身存在的合法性進行判斷,如果認為自身的存在和運行是被授權的、合法的,就運行;否則終止運行。這樣即使軟體可以被隨意復制,只要盜版用戶沒有相應的授權信息就無法使用軟體。
2、阻止反編譯
對編譯產生的Class文件加密處理,並在運行時進行解密,解密者無法對軟體進行反編譯。
二、Java軟體加密的總體流程
為了保護用Java語言開發的軟體,我們設計並實現了一個實用、高強度的加密演算法。以下稱需要保護的Java軟體為「受保護程序」,稱對「受保護程序」進行加密保護的軟體為「加密程序」。對軟體加密保護的流程如圖1所示。

三、加密演算法分析設計
1、用戶信息提取器設計
為了防止用戶發布序列號而導致「一次發行,到處都是」的盜版問題,提取用戶機器中硬體相關的、具有唯一性的信息——用戶計算機的硬碟分區C的序列號,並要求用戶將此信息與用戶名一起返回,之後用「序列號生成器」根據用戶返回信息生成一個唯一合法的軟體注冊序列號發回用戶,用戶即可使用此號碼注冊使用軟體。
這個信息提取器使用Winclows 32匯編以一個獨立的小程序方式實現,程序代碼如圖2所示。

2、序列號生成器與序列號合法性判斷函數的設計
序列號生成器與序列號合法性判斷函數中運用RSA加密演算法。在序列號生成器中是使用私鑰將用戶返回的信息(硬碟序列號,用戶名)進行加密得到相應的注冊序列號;在序列號合法性判斷函數中使用私鑰將用戶輸入的注冊序列號解密,再與(硬碟序列號,用戶名)進行比較,一致則調用程序裝載器將程序其他部分解密裝入內存,初始化刪環境並運行程序主體;否則退出。
RSA加密演算法的實現需要使用大數運算庫,我們使用MIRACL大數庫來實現RSA計算,序列號生成器的主要代碼如下:
char szlnputString[]=」機器碼和用戶名組成的字元串」;
char szSerial[256]=[0];//用於存放生成的注冊碼
bign,d,c,m; //MIRACL中的大數類型
mip→IBASE=16; //以16進制模式
n= mlrvar(0); //初始化大數
d= mirvar(0);
c= mirvar(0); //C存放輸入的字元串大數
m= mlrva(o);
bytes to big( len, szlnputString,c);
//將輸入字元串轉換成大數形式並存入變數c中
cinstr(n,」以字元串形成表示的模數」);//初始化模數
cinstr(d,」以字元串形成表示的公鑰」)://初始化公鑰
powmod(c,d,n,m); //計算m=cdmod n
cotstr(m,szSerial);//m的16進制字元串即為注冊碼
序列號合法性檢測函數的主要代碼如下:
char szlnputStringL]=」機器碼和用戶名組成的字元串」;
char szSerial[ 256]=」用戶輸入的序列號」
bign,e,c,m; //MIRACL中的大數類型
mip→IBASE=16; //以16進制模式
cinstr(m,szSerial); //將序列號的16進制轉成大數形式
cinstr(n,」模數n的字元串形式」);//初始化模數n
cinstr(e,」字元串形式的公鑰」);//初始化公鑰
if compare(m,n)==-1) //m<n時才進行解密
{
powmod(m,e,n,c);//計算m=me mod n
big_to _bytes(0,c,szSerial,0); //轉為字元串
return lstrcmp( szlnputString,szSerial);
}
3、強耦合關系的設計
如果在序列號合法性檢測函數中簡單地使用圖3所示流程:

解密者可以使用以下幾種手段進行攻擊:
(1)修改「判斷合法性子函數」的返回指令,讓它永遠返回正確值,這樣可以使用任意的序列號,安裝/使用軟體。
(2)修改判斷後的跳轉指令,使程序永遠跳到正確的分支運行,效果和上一種一樣。
(3)在「判斷合法性子函數」之前執行一條跳轉指令,繞過判斷,直接跳轉到「正常執行」分支運行,這樣可以不用輸入序列號安裝/使用軟體。
為阻止以上攻擊手段,筆者在程序中增加了「序列號合法性檢測函數」與程序其他部分「強耦合」(即增強其與程序其他部分的關聯度,成為程序整體密不可分的一部分,一旦被修改程序將無法正常工作)的要求(見圖1),並且設置一個「完整性檢測函數」用於判斷相關的代碼是否被修改過。當然,基於同樣的原因,「完整性檢測函數」也必須與程序其他部分存在「強耦合」關系。
強耦合關系通過以下方式建立:
在程序其他部分的函數(例如函數A)中隨機的訪問需要強耦合的「序列號合法性檢測函數」和「完整性檢測函數」,在調用時隨機的選擇使用一個錯誤的序列號或是用戶輸入的序列號,並根據返回結果選擇執行A中正常的功能代碼還是錯誤退出的功能代碼,流程如圖4所示。

經過這種改進,如果破解者通過修改代碼的方式破解將因「完整性檢測」失敗導致程序退出;如果使用SMC等技術繞過「序列號合法性判斷函數」而直接跳至序列號正確時的執行入口,在後續的運行中,將因為隨機的耦合調用失敗導致程序退出。破解者要破解軟體將不得不跟蹤所有進行了耦合調用的函數,這顯然是一個艱巨的任務。
4、完整性檢測函數的設計
我們使用CRC演算法算出需進行完整性檢測的文件的校驗碼,並用RSA加密演算法的公鑰(不同於序列號合法性檢測中的公鑰/私鑰對)將其加密存放在特定的文件中,在檢測時先用CRC演算法重新生成需進行完
整性檢測的文件的校驗碼,並用私鑰將保存的校驗碼解密,兩者相比較,相等則正常運行;否則退出。
5、程序載入器的設計
與編譯成機器碼執行的程序不同,Java程序只能由Java虛擬機解釋執行,因此程序載入器的工作包括:初始化Java虛擬機;在內存中解密當前要運行的class文件;使解密後的c:lass文件在虛擬機中運行,在
需要時解密另一個class文件。圖5是用於初始化JVM的代碼:

以上介紹了我們設計的針對Java軟體的加密保護方法,其中綜合運用了多種加密技術,抗破解強度高;使用純軟體保護技術,成本低。經筆者在Windows系列平台上進行測試,運行穩定,效果良好。
在研宄開發過程中,我們還總結出加密保護軟體的一些經驗:
1、對關鍵代碼和數據要靜態加密,再動態解密執行;要結合具體的工作平台使用反跟蹤/調試技術;
2、要充分利用系統的功能,如在Windows下使用DLL文件或驅動程序形式能得到最大的豐又限,可以充分利用系統具有的各種功能;
3、如果可能應該將關鍵代碼存放在不可禚復制的地方;
4、序列號要與機器碼等用戶信息相關以阻止鹽復布序列號;
5、加密流程的合理性比加密演算法本身的強度更重要。

閱讀全文

與加密java框架相關的資料

熱點內容
php打碼嵌入html文檔 瀏覽:446
java如何彈出文件夾選擇框選擇文件路徑 瀏覽:525
saveaspdf的插件 瀏覽:23
電腦文件夾右鍵點擊總是未響應 瀏覽:4
失業的程序員35 瀏覽:263
windowscmd怎麼編譯 瀏覽:275
游戲反編譯的apk無法安裝 瀏覽:987
e盤打不開拒絕你訪問該文件夾 瀏覽:51
C程序編譯的匯編如何閱讀 瀏覽:743
pdf格式怎樣轉換成word 瀏覽:756
如何查看已解壓的文件 瀏覽:416
怎樣把相冊圖片變成文件夾 瀏覽:147
在shell中使用at命令 瀏覽:431
萬寶壓縮機樣本 瀏覽:893
黑馬程序員與傳智專修學院 瀏覽:18
安卓沒開啟adb怎麼連接電腦 瀏覽:102
冒泡排序演算法由來 瀏覽:680
離職程序員帶走代碼占為己有 瀏覽:447
雲伺服器如何安裝node 瀏覽:387
三星手動更新app怎麼忽略 瀏覽:619