java des对称加密_JAVA加密解密DES对称加密算法
1 下面用DES對稱加密算法(設定一個密鑰,然后對所有的數據進行加密)來簡單舉個例子。2
3 首先,生成一個密鑰KEY。4 我把它保存到key.txt中。這個文件就象是一把鑰匙。誰擁有它,誰就能解開我們的類文件。代碼參考如下:5 packagecom.neusoft.jiami;6 importJava.io.File;7 importjava.io.FileOutputStream;8 importjava.security.SecureRandom;9 importjavax.crypto.KeyGenerator;10 importjavax.crypto.SecretKey;11 classKey {12 privateString keyName;13 publicKey(String keyName) {14 this.keyName =keyName;15 }16 public void createKey(String keyName) throwsException {17 //創建一個可信任的隨機數源,DES算法需要
18 SecureRandom sr = newSecureRandom();19 //用DES算法創建一個KeyGenerator對象
20 KeyGenerator kg = KeyGenerator.getInstance("DES");21 //初始化此密鑰生成器,使其具有確定的密鑰長度
22 kg.init(sr);23 //生成密匙
24 SecretKey key =kg.generateKey();25 //獲取密鑰數據
26 byte rawKeyData[] =key.getEncoded();27 //將獲取到密鑰數據保存到文件中,待解密時使用
28 FileOutputStream fo = new FileOutputStream(newFile(keyName));29 fo.write(rawKeyData);30 }31 public static voidmain(String args[]) {32 try{33 new Key("key.txt");34 } catch(Exception e) {35 e.printStackTrace();36 }37 }38 }39 第二步,對我們所要進行加密的類文件進行加密。40 比如我有一個DigestPass類,已經被正常編譯好生成DigestPass.class文件。此時,這個類文件是任何人都可以用的。因為系統的類加載器可以自動的加載它。那么下一步,我們要做的就是把這個類文件加密。使系統的類加載器無法讀取到正確的字節碼文件。參考代碼如下:41 packagecom.neusoft.jiami;42 importjava.io.File;43 importjava.io.FileInputStream;44 importjava.io.FileOutputStream;45 importjava.security.SecureRandom;46 importjavax.crypto.Cipher;47 importjavax.crypto.SecretKey;48 importjavax.crypto.SecretKeyFactory;49 importjavax.crypto.spec.DESKeySpec;50 public classJiaMi {51 public static void main(String[] args) throwsException {52 //DES算法要求有一個可信任的隨機數源
53 SecureRandom sr = newSecureRandom();54 //獲得密匙數據
55 FileInputStream fi = new FileInputStream(new File("key.txt"));56 byte rawKeyData[] = new byte[fi.available()];57 fi.read(rawKeyData);58 fi.close();59 //從原始密匙數據創建DESKeySpec對象
60 DESKeySpec dks = newDESKeySpec(rawKeyData);61 //創建一個密匙工廠,然后用它把DESKeySpec轉換成一個SecretKey對象
62 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);63 //Cipher對象實際完成加密操作
64 Cipher cipher = Cipher.getInstance("DES");65 //用密匙初始化Cipher對象
66 cipher.init(Cipher.ENCRYPT_MODE, key, sr);67 //現在,獲取要加密的文件數據
68 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));69 byte data[] = new byte[fi2.available()];70 fi2.read(data);71 fi2.close();72 //正式執行加密操作
73 byte encryptedData[] =cipher.doFinal(data);74 //用加密后的數據覆蓋原文件
75 FileOutputStream fo = new FileOutputStream(new File("DigestPass.class"));76 fo.write(encryptedData);77 fo.close();78 }79 }80 第三步,用自定義的CLASSLOADER進行加載。參考代碼如下:81 packagecom.neusoft.jiami;82 importjava.io.File;83 importjava.io.FileInputStream;84 importjava.io.FileOutputStream;85 importjava.security.SecureRandom;86 importjavax.crypto.Cipher;87 importjavax.crypto.SecretKey;88 importjavax.crypto.SecretKeyFactory;89 importjavax.crypto.spec.DESKeySpec;90 importcom.neusoft.classloader.MyClassLoader;91 public classJieMi {92 public static void main(String[] args) throwsException {93 //DES算法要求有一個可信任的隨機數源
94 SecureRandom sr = newSecureRandom();95 //獲得密匙數據
96 FileInputStream fi = new FileInputStream(new File("key.txt"));97 byte rawKeyData[] = new byte[fi.available()];//= new byte[5];
98 fi.read(rawKeyData);99 fi.close();100 //從原始密匙數據創建一個DESKeySpec對象
101 DESKeySpec dks = newDESKeySpec(rawKeyData);102 //創建一個密匙工廠,然后用它把DESKeySpec對象轉換成一個SecretKey對象
103 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);104 //Cipher對象實際完成解密操作
105 Cipher cipher = Cipher.getInstance("DES");106 //用密匙初始化Cipher對象
107 cipher.init(Cipher.DECRYPT_MODE, key, sr);108 //現在,獲取數據并解密
109 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));110 byte encryptedData[] = new byte[fi2.available()];111 fi2.read(encryptedData);112 fi2.close();113 //正式執行解密操作
114 byte decryptedData[] =cipher.doFinal(encryptedData);115 //這時把數據還原成原有的類文件116 //FileOutputStream fo = new FileOutputStream(new117 //File("DigestPass.class"));118 //fo.write(decryptedData);119 //用解密后的數據加載類并應用
120 MyClassloader mcl = new MyClassloader("E:/");121 Class cl = mcl.loadClass(decryptedData, "com.neusoft.jiami.DigestPass");122 DigestPass dp =cl.newInstance();123 }124 }
總結
以上是生活随笔為你收集整理的java des对称加密_JAVA加密解密DES对称加密算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 慢查询过多_MySQL 慢查
- 下一篇: VC和TC的区别