JAVA加密解密DES对称加密算法

  1 下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。
  2
  3 首先,生成一个密钥KEY。
  4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。代码参考如下:
  5 package com.neusoft.jiami;
  6 import Java.io.File;
  7 import java.io.FileOutputStream;
  8 import java.security.SecureRandom;
  9 import javax.crypto.KeyGenerator;
 10 import javax.crypto.SecretKey;
 11 class Key {
 12     private String keyName;
 13     public Key(String keyName) {
 14         this.keyName = keyName;
 15      }
 16     public void createKey(String keyName) throws Exception {
 17         // 创建一个可信任的随机数源,DES算法需要
 18          SecureRandom sr = new SecureRandom();
 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(new File(keyName));
 29          fo.write(rawKeyData);
 30      }
 31     public static void main(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 package com.neusoft.jiami;
 42 import java.io.File;
 43 import java.io.FileInputStream;
 44 import java.io.FileOutputStream;
 45 import java.security.SecureRandom;
 46 import javax.crypto.Cipher;
 47 import javax.crypto.SecretKey;
 48 import javax.crypto.SecretKeyFactory;
 49 import javax.crypto.spec.DESKeySpec;
 50 public class JiaMi {
 51     public static void main(String[] args) throws Exception {
 52         // DES算法要求有一个可信任的随机数源
 53          SecureRandom sr = new SecureRandom();
 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 = new DESKeySpec(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 package com.neusoft.jiami;
 82 import java.io.File;
 83 import java.io.FileInputStream;
 84 import java.io.FileOutputStream;
 85 import java.security.SecureRandom;
 86 import javax.crypto.Cipher;
 87 import javax.crypto.SecretKey;
 88 import javax.crypto.SecretKeyFactory;
 89 import javax.crypto.spec.DESKeySpec;
 90 import com.neusoft.classloader.MyClassLoader;
 91 public class JieMi {
 92     public static void main(String[] args) throws Exception {
 93         // DES算法要求有一个可信任的随机数源
 94          SecureRandom sr = new SecureRandom();
 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 = new DESKeySpec(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(new
117         // 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 }
时间: 2024-10-24 18:21:03

JAVA加密解密DES对称加密算法的相关文章

Java 加密解密之对称加密算法AES

Java 加密解密之对称加密算法AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一.该算法

◆JAVA加密解密-DES

DES算法提供CBC, OFB, CFB, ECB四种模式,MAC是基于ECB实现的. 一.数据补位 DES数据加解密就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节(通常补00或者FF,根据实际要求不同)进行计算,之后按照顺序将计算所得的数据连在一起即可. 这里有个问题就是为什么要进行数据补位?主要原因是DES算法加解密时要求数据必须为8个字节. 二.ECB模式 DES ECB(电子密本方式)其实非常简单,就是将数据按照8

常用加密算法的Java实现总结(二) ——对称加密算法DES、3DES和AES

常用加密算法的Java实现总结(二) ——对称加密算法DES.3DES和AES 日期:2014/7/6 文:阿蜜果 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文.在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥

Java加密解密与数字证书的操作

1 keytool命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(文件夹是c: Documents and Settingusername)和算法(DSA) keytool -genkey 默认的别名mykey 密钥库中能够存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分. [plain] view plaincopy keytool -genkey -alias mytest -keyalg RSA -keysize 1024 -keysto

密码学——Java 加密解密基础

Java  加密解密基础 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 密码学常用术语 明文: 待加密数据. 密文: 明文经过加密后数据. 加密: 将明文转换为密文的过程. 加密算法: 将明文转换为密文的转换算法. 加密密钥: 通过加密算法进行加密操作的密钥. 解密: 将密文转换为铭文的过程. 解密算法: 将密文转换为明文的转换算法. 解密密钥: 通过解密短发进行解密操作的密

C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应位其中一个为1另一个为0,则返回1. //对数字加密 int P_int_Num, P_int_Key;//定义两个值类型变量 string Encryptstr = (P_int_Num ^ P_int_Key).ToString();//加密数值 //对数字解密 int P_int_Key, P_int_

利用DotNET密码系统之一的DES对称加密算法保证数据安全

///////////////////////////////////////////////////////////// //Author: stardicky // //E-mail: [email protected] // //QQNumber: 9531511 // //CompanyName: Ezone International // //Class: HBS-0308 // //title: 利用DotNET密码系统保证数据安全 // /////////////////////

java加密解密和证书的demo

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.InvalidKeyException; import java.security.Key; import java.security.KeyPair; import java.security.KeyPa

Java加密解密字符串

http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串 旧文重发:http://www.blogjava.net/vwpolo/archive/2009/12/05/304874.html#383365 import java.security.Key; import java.security.Security; import javax.crypto.Cipher; /** * DES加密和解密工具,