使用DES加密方式对文件进行加密

DES加密由于在java中非常方便使用,而且性能不错,所以非常流行!!! 
使用DES 首先需要密钥。。2种方法:第一自己设置 

Java代码    收藏代码
  1. //自己设置  
  2. private final static String encodeKey ="moomaia" 
  3.   
  4.     
  5.     private Key getKey() throws Exception  
  6.         // 创建一个空的8位字节数组(默认值为0)  
  7.         byte[] arrBTmp encodeKey.getBytes();  
  8.         System.out.println(arrBTmp.length);  
  9.         byte[] arrB new byte[8];  
  10.         // 将原始字节数组转换为8位  
  11.         for (int 0arrBTmp.length && arrB.length; i++)  
  12.             arrB[i] arrBTmp[i];  
  13.          
  14.         // 生成密钥  
  15.           
  16.         System.out.println(arrB.length);  
  17.         Key key new javax.crypto.spec.SecretKeySpec(arrB, "DES");  
  18.         return key;  
  19.      
  20.       



第二种:系统生成: 
Java代码    收藏代码
  1. private void createKey()  
  2.        try  
  3.            // 得到密钥的实例 以什么方式加密。加密的方式比较多。  
  4.            KeyGenerator kg KeyGenerator.getInstance("DES");  
  5.            kg.init(56);  
  6.              
  7.            SecretKey key kg.generateKey();  
  8.            // 将生成的密钥对象写入文件。  
  9.            ObjectOutputStream objectOutputStream new ObjectOutputStream(  
  10.                    new FileOutputStream(new File("e:\\key.obj")));  
  11.            objectOutputStream.writeObject(key);  
  12.        catch (NoSuchAlgorithmException e)  
  13.            e.printStackTrace();  
  14.        catch (FileNotFoundException e)  
  15.            e.printStackTrace();  
  16.        catch (IOException e)  
  17.            e.printStackTrace();  
  18.         
  19.     
  20.   
  21.   
  22.    private static Key getKey(String KeyFilePath)  
  23.        Key key null 
  24.        try  
  25.            // 将生成的密钥对象从文件中读取出来,然后再强制转换成一个密钥对象。  
  26.            ObjectInputStream objectInputStream new ObjectInputStream(  
  27.                    new FileInputStream(new File(KeyFilePath)));  
  28.            key (Key) objectInputStream.readObject();  
  29.        catch (FileNotFoundException e)  
  30.            e.printStackTrace();  
  31.        catch (IOException e)  
  32.            e.printStackTrace();  
  33.        catch (ClassNotFoundException e)  
  34.            e.printStackTrace();  
  35.         
  36.        return key;  
  37.     



有了密钥之后开始对文件加密:详情见代码:【酷毙程序员,一切都在代码中】 

Java代码    收藏代码
  1.   
  2.    public  String encrypt(String source) throws Exception  
  3.     byte[] target =null 
  4.     File srcFile new File(source);  
  5.     System.out.println(srcFile.getCanonicalPath());  
  6.     if(!srcFile.exists()){  
  7.         System.out.println("文件不存在");  
  8.      
  9.     String newName srcFile.getAbsolutePath()+".m" 
  10.     FileInputStream fis new FileInputStream(srcFile);  
  11.     int fileSize fis.available();  
  12.     FileOutputStream fos new FileOutputStream(new File(newName));  
  13.       
  14.     Key key getKey();  
  15.        try  
  16.         Cipher cipher Cipher.getInstance("DES");  
  17.         cipher.init(Cipher.ENCRYPT_MODE, key);  
  18.         byte[] buf new byte[fileSize];  
  19.         System.out.println(fileSize);  
  20.         int 0 
  21.         while((c=fis.read(buf))!=-1){  
  22.             target cipher.doFinal(buf);  
  23.             //base64encoder.encode(target,fos);  
  24.             fos.write(target);  
  25.          
  26.        catch (NoSuchAlgorithmException e)  
  27.            e.printStackTrace();  
  28.        catch (NoSuchPaddingException e)  
  29.            e.printStackTrace();  
  30.        catch (UnsupportedEncodingException e)  
  31.            e.printStackTrace();  
  32.        catch (InvalidKeyException e)  
  33.            e.printStackTrace();  
  34.        catch (IllegalBlockSizeExceptioe)  
  35.            e.printStackTrace();  
  36.        catch (BadPaddingException e)  
  37.            e.printStackTrace();  
  38.         
  39.        return newName;  
  40.     


当然也可分成小点方法:代码就好的看点 

把解密分开写: 

Java代码    收藏代码
  1.   
  2.     public  byte[] decrypt(byte[] source)  
  3.         byte[] dissect null 
  4.         try  
  5.             Key key getKey();  
  6.             Cipher cipher Cipher.getInstance("DES");  
  7.             cipher.init(Cipher.DECRYPT_MODE, key);// 使用私钥解密  
  8.             dissect cipher.doFinal(source);  
  9.         catch (NoSuchAlgorithmException e)  
  10.             e.printStackTrace();  
  11.         catch (NoSuchPaddingException e)  
  12.             e.printStackTrace();  
  13.         catch (InvalidKeyException e)  
  14.             e.printStackTrace();  
  15.         catch (IllegalBlockSizeExceptioe)  
  16.             e.printStackTrace();  
  17.         catch (BadPaddingException e)  
  18.             e.printStackTrace();  
  19.         catch (Exception e)  
  20.             // TODO Auto-generated catch block  
  21.             e.printStackTrace();  
  22.          
  23.         return dissect;  
  24.      
  25.       
  26.       
  27.       
  28.     public byte[] getByteFromFile(){  
  29.         //BASE64Decoder base64decoder new BASE64Decoder();  
  30.          byte[] encodeByte =null 
  31.         try  
  32.            // encodeByte base64decoder.decodeBuffer(new FileInputStream(new File("D:\\t.txt")));  
  33.             FileInputStream fis =new FileInputStream(new File("D:\\ch03.pdf.m"));  
  34.             int fileSize fis.available();  
  35.             encodeByte new byte[fileSize];  
  36.             fis.read(encodeByte);  
  37.         catch (FileNotFoundException e)  
  38.             e.printStackTrace();  
  39.         catch (IOException e)  
  40.             e.printStackTrace();  
  41.          
  42.         return encodeByte;  
  43.      
  44.       
  45.       
  46.     public  void writeByteToFile(byte[] b, String filePath)  
  47.         File file new File(filePath);  
  48.         if (!file.exists())  
  49.             try  
  50.                 file.createNewFile();  
  51.             catch (IOException e)  
  52.                 e.printStackTrace();  
  53.              
  54.          
  55.         FileOutputStream fileOutputStream;  
  56.         try  
  57.             fileOutputStream new FileOutputStream(file);  
  58.               
  59.             fileOutputStream.write(b);  
  60.             fileOutputStream.close();  
  61.         catch (IOException e)  
  62.             e.printStackTrace();  
  63.          
  64.      


测试代码:速度相当之快,DES>>base64encode.估计也是流行原因之一 

Java代码    收藏代码
  1. public static void main(String[] args) throws Exception  
  2.       
  3.     DESofFile desf= new DESofFile();  
  4.     //desf.createKey();  
  5.     Date times new Date();  
  6.     long start times.getTime();  
  7.         desf.encrypt("d:\\ch03.pdf");  
  8.         desf.writeByteToFile(desf.decrypt(desf.getByteFromFile()), "d:\\ch03-9.pdf");  
  9.     Date times2 new Date();  
  10.     long end =times2.getTime();  
  11.       
  12.     System.out.println(end start);  
  13.     
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: DES加密是一种对文件进行加密的方法。DES(Data Encryption Standard)是一种对称加密算法,使用相同的密钥进行加密和解密。 首先,需要选择一个合适的密钥DES算法使用56位的密钥,但由于安全性问题,通常使用64位的密钥,并使用第8位作为奇偶校验位。 其次,将文件按照固定的块大小(通常为64位)进行分块。如果文件大小不是块大小的倍数,则需要进行补零或者使用其他填充方式。 然后,对每个块使用DES算法进行加密加密过程包括初始置换、16轮的Feistel轮函数以及最终变换。在每一轮使用密钥进行轮函数和数据的异或操作。 最后,将加密后的块组合在一起,形成加密后的文件。如果需要,可以将加密后的文件进行进一步的压缩或者保存到其他文件格式。 需要注意的是,为了保证安全性,密钥的管理非常重要。密钥应该被妥善保存,并且在每次使用之后要及时销毁或者更新。 总之,DES加密是一种对文件进行保密的方法,它可以通过选择合适的密钥,对文件进行分块和加密,最终生成加密后的文件。 ### 回答2: DES(Data Encryption Standard)是一种对文件进行加密的常见算法。它是一种对称加密算法,使用相同的密钥进行加密和解密。下面是使用DES算法对文件进行加密的一般步骤: 1. 生成密钥DES算法使用56位的密钥。首先需要生成这个密钥。可以通过随机数生成器或者密钥生成算法来生成一个合适的密钥。 2. 分割文件:将要加密文件按照固定大小(例如64位或128位)进行分割。每个分割部分被称为一个“数据块”。 3. 加密每个数据块:对于分割后的每个数据块,使用生成的密钥进行加密。采用DES算法对单个数据块进行加密,得到加密后的数据块。 4. 合并加密后的数据块:将加密后的每个数据块按照一定的顺序合并起来,形成一个大小与原文件相同的加密后的文件。 5. 保存密钥加密后的文件:将生成的密钥保存在安全的地方,以便解密时使用。同时保存加密后的文件,即加密后的数据块组成的文件。 通过上述步骤,我们可以使用DES算法对文件进行加密。需要注意的是,DES算法是一种比较老旧的加密算法,在现代加密领域已经被更安全的算法所取代,因此在实际应用可能需要考虑使用更加安全的加密算法以保护文件的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值