`
jiuyuehe
  • 浏览: 184199 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

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

//自己设置
private final static String encodeKey ="moomaia";

  
	private Key getKey() throws Exception {
		// 创建一个空的8位字节数组(默认值为0)
		byte[] arrBTmp = encodeKey.getBytes();
		System.out.println(arrBTmp.length);
		byte[] arrB = new byte[8];
		// 将原始字节数组转换为8位
		for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
			arrB[i] = arrBTmp[i];
		}
		// 生成密钥
		
		System.out.println(arrB.length);
		Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
		return key;
	}
    




第二种:系统生成:
 private void createKey() {
        try {
            // 得到密钥的实例 以什么方式加密。加密的方式比较多。
            KeyGenerator kg = KeyGenerator.getInstance("DES");
            kg.init(56);
            
            SecretKey key = kg.generateKey();
            // 将生成的密钥对象写入文件。
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(
                    new FileOutputStream(new File("e:\\key.obj")));
            objectOutputStream.writeObject(key);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 /**
     * @param KeyFilePath
     *            密钥Key对象的路径。注意使用该方法的时候,确保你已经生成了密钥。
     * @return
     * @Description 从文件中读出Key,用于加密使用。
     */
    private static Key getKey(String KeyFilePath) {
        Key key = null;
        try {
            // 将生成的密钥对象从文件中读取出来,然后再强制转换成一个密钥对象。
            ObjectInputStream objectInputStream = new ObjectInputStream(
                    new FileInputStream(new File(KeyFilePath)));
            key = (Key) objectInputStream.readObject();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return key;
    }



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


 /**
     * 
     * 字符串加密  ---byte[]
     * @param source
     * @return 放回一个byte数组,为什么不放回字符串,是因为解密的时候要传入这个byte数组才能进行解密,如果解密的时候传入的是字符串
     *         那么就会出错,愿意是编码的问题。
     * @throws Exception 
     * @Description 将传入的字符串进行加密 下面写了将这种byte数组转换成字符串的方法。直接在调用就行了。
     */
    public  String encrypt(String source) throws Exception {
    	byte[] target =null;
    	File srcFile = new File(source);
    	System.out.println(srcFile.getCanonicalPath());
    	if(!srcFile.exists()){
    		System.out.println("文件不存在");
    	}
    	String newName = srcFile.getAbsolutePath()+".m";
    	FileInputStream fis = new FileInputStream(srcFile);
    	int fileSize = fis.available();
    	FileOutputStream fos = new FileOutputStream(new File(newName));
    	
    	Key key = getKey();
        try {
        	Cipher cipher = Cipher.getInstance("DES");
        	cipher.init(Cipher.ENCRYPT_MODE, key);
        	byte[] buf = new byte[fileSize];
        	System.out.println(fileSize);
        	int c = 0;
        	while((c=fis.read(buf))!=-1){
        		target = cipher.doFinal(buf);
        		//base64encoder.encode(target,fos);
        		fos.write(target);
        	}
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return newName;
    }


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

把解密分开写:


/**
     * 解密----byte[]
     * @param source
     *            加密后的byte数组。可用加密方法encrypt(“String”)生成即可
     * @return 解密后的字符串。
     * @throws Exception 
     * @Description 解密算法。
     */
    public  byte[] decrypt(byte[] source) {
        byte[] dissect = null;
        try {
            Key key = getKey();
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.DECRYPT_MODE, key);// 使用私钥解密
            dissect = cipher.doFinal(source);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return dissect;
    }
    
    
    /**从File ---->byte[]
     * @return
     * @Description 由于加密之前采用了编码的格式 所以现在采用特点的方式读出来 ,然后得到用一个byte[]用于解码。
     */
    public byte[] getByteFromFile(){
        //BASE64Decoder base64decoder = new BASE64Decoder();
    	 byte[] encodeByte =null;
        try {
           // encodeByte = base64decoder.decodeBuffer(new FileInputStream(new File("D:\\t.txt")));
            FileInputStream fis =new FileInputStream(new File("D:\\ch03.pdf.m"));
            int fileSize = fis.available();
            encodeByte = new byte[fileSize];
            fis.read(encodeByte);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return encodeByte;
    }
    
    /**
     * 写入文件
     * @param b
     * @param filePath
     * @Description 将指定的字节写入到文件中。
     */
    public  void writeByteToFile(byte[] b, String filePath) {
        File file = new File(filePath);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        FileOutputStream fileOutputStream;
        try {
            fileOutputStream = new FileOutputStream(file);
            
            fileOutputStream.write(b);
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


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

 public static void main(String[] args) throws Exception {
    	
    	DESofFile desf= new DESofFile();
    	//desf.createKey();
    	Date times = new Date();
    	long start = times.getTime();
    		desf.encrypt("d:\\ch03.pdf");
    		desf.writeByteToFile(desf.decrypt(desf.getByteFromFile()), "d:\\ch03-9.pdf");
    	Date times2 = new Date();
    	long end =times2.getTime();
    	
    	System.out.println(end - start);
    }



引用

本人菜鸟。错误的地方虚心请教!!谢谢
分享到:
评论

相关推荐

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    DES文件加密传输

    DES使用64位的密钥,对数据进行64次迭代操作,每轮迭代包括置换、异或等步骤,使得加密过程复杂且难以破解。加密后的DES信息是一个密文,对于外人来说几乎是不可读的,从而提高了数据的保密性。 在文件传输过程中,...

    des.zip_DES 加密 文件_DES 文件加密_文件加密

    通过使用des算法对普通文件加密加密的实现

    DES 加密,RSA 加密,DES 文件加密

    在实际应用中,为了保护文件的安全,可以先用非对称加密如RSA对文件的密钥进行加密,然后使用对称加密如DES对文件内容进行加密。这样,只有知道私钥的人才能解密文件。C_DesEncryptFile.cpp和C_DesEncryptFile.h文件...

    Java实现文件的RSA和DES加密

    文件加密可以通过使用 Cipher 对象来实现,首先需要获取 DES 加密的密钥,然后使用 Cipher 对象来加密文件。 同样,在 Java 中,实现 RSA 加密算法也可以通过生成一对密钥,然后保存到 xml 文件中,以便以后获取私...

    C#des对文件进行加密解密

    本篇文章将深入探讨如何使用C#语言实现DES对文件的加密和解密操作。 首先,了解DES算法的基础知识。DES是一种块加密算法,每个数据块大小为64位,实际用于加密的有效数据为56位,因为8位用于奇偶校验。它采用了一种...

    Des文件加密工具 一个使用Des算法对文件进行加密的工具,支持大文件

    一个使用Des算法对文件进行加密的工具,支持大文件

    des加密算法实现任意文件加解密

    3. **加密操作**:调用`Cipher`对象的`init(Cipher.ENCRYPT_MODE, key)`方法初始化加密过程,然后使用`doFinal()`方法对文件数据进行加密,得到加密后的字节数组。 4. **解密操作**:与加密类似,先初始化`Cipher`...

    文件和文件夹的加密和解密工具(Des算法)

    6. **解密过程**:使用相同的密钥和模式,对加密文件进行解密,恢复原始内容。 7. **安全存储密钥**:密钥的安全存储至关重要,因为一旦丢失或遗忘,加密的数据将无法恢复。 在实际应用中,由于DES的安全性限制,...

    des加密解密_Des加密解密_DES加密_

    在给定的“des加密例程”中,可能包含了一个调用动态链接库(DLL)实现DES加密解密的示例代码。DLL是Windows操作系统中的一种共享库,可以被多个程序同时调用,节省内存资源并便于代码复用。这个示例可能涉及以下...

    DES加密源文件 文件加密

    这通常涉及读取文件内容,按块进行DES加密,然后将加密后的数据写回文件。 7. **解密过程**:与加密相反,解密是通过应用逆操作来恢复原始数据。源代码中应该包含对应的解密函数,使用相同的密钥和逆向操作还原数据...

    DES.rar_DES加密_c 文件加密_加密解密_文件 加密_文件加密

    des加密解密 对文件进行加密解密 des加密解密 对文件进行加密解密

    sql server 中进行des加密

    在SQL Server中进行DES加密是保护敏感数据的一种常见方法,特别是在C#应用程序中与数据库交互时。DES(Data Encryption Standard)是一种对称加密算法,它使用相同的密钥进行加密和解密,提供了一种相对快速的数据...

    3des加密字符串文件加密

    3DES的工作原理可以简单概括为:首先,对明文使用一个密钥进行DES加密;接着,再用另一个密钥对上一步得到的密文进行DES解密;最后,再次用第三个密钥对解密后的密文进行DES加密。这样,即使攻击者获得了部分加密...

    DES算法实现对文件的加密

    每个数据块使用DES加密函数(如`CryptEncrypt`)进行加密。 4. **处理边界情况**:最后一个数据块可能不满64位,此时需要填充到64位,并进行加密。填充方法通常遵循PKCS#7标准。 5. **写入密文**:将所有加密后的...

    基于3DES的文件加密

    - 第一轮加密:使用子密钥K1对明文数据块进行DES加密。 - 第二轮解密:使用子密钥K2对上一步得到的密文进行DES解密。 - 第三轮加密:再使用子密钥K3对第二步得到的密文进行DES加密。最终得到的密文就是3DES加密的...

    Qt写的DES加密算法展示程序

    在这个“Qt写的DES加密算法展示程序”中,我们将深入探讨DES(Data Encryption Standard)加密算法以及如何使用Qt来实现这一经典密码学技术。 **DES加密算法** DES是一种块加密算法,由IBM在1970年代初期开发,并...

    3des加密 仅能加密英文 和 txt文件

    标题中的“3DES加密”指的是Triple DES(三重数据加密标准),它是一种广泛使用的对称加密算法,基于DES(Data Encryption Standard)并将其安全性增强了三倍。DES原本使用56位密钥,3DES通过三次独立的DES加密过程...

    文件加密系统(使用DES算法给文件加密)

    在这个文件加密系统中,用户可以将需要保护的文件输入到程序中,程序会使用DES算法生成一个密钥,然后用这个密钥对文件内容进行加密。加密过程通常是将文件读取成二进制数据,然后应用DES算法进行位操作,最后生成...

    3DES加密解密工具

    压缩包内的“3des.exe”文件很可能是该3DES加密解密工具的可执行程序,用户可以通过运行这个程序来实现对数据的加密和解密。使用此类工具时,用户需要输入适当的密钥,并选择加密或解密模式。对于3DES,为了保证安全...

Global site tag (gtag.js) - Google Analytics