`
ispring
  • 浏览: 359436 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对文件进行对称的DES加密

阅读更多
package com.ivan.security.algorithm;

/**
 * 对字符流进行对称的DES加密
 * @author Ivan
 * @DataTime 2006-12-11 12:34
 *
 */

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import com.iuxi.security.util.*;

public class DESUtil ...{
    
    private static String Algorithm = "DESede"; //"DESede" for Triple DES
    private static KeyGenerator keyGen = null;
    private static SecretKey desKey = null;
    private static Cipher c = null;
    private static byte[] cipherByte = null;
    
    public DESUtil() ...{
        init();
    }
    
    public static void init() ...{
        try ...{
            c = Cipher.getInstance(Algorithm);
        } catch (NoSuchAlgorithmException e) ...{
            System.err.println("初始化错误,原因:所指定的算法无效!");
            e.printStackTrace();
        } catch (NoSuchPaddingException e) ...{
            e.printStackTrace();
        }
    }

    public static String getAlgorithm() ...{
        return Algorithm;
    }

    public static void setAlgorithm(String algorithm) ...{
        DESUtil.Algorithm = algorithm;
    }
    
    public static void setDesKey (SecretKey desKey) ...{
        DESUtil.desKey = desKey;
    }

    /** *//**
     * 保存密钥信息到磁盘
     * @param filepath 保存路径
     * @return
     */
    public static void saveKey(String filePath) ...{
        if (desKey != null) ...{
            try ...{
                FileOutputStream fos = new FileOutputStream(filePath);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(desKey);
            }catch (IOException e) ...{
                System.err.println("保存密钥信息出错!");
                e.printStackTrace();
            }
        }
        else ...{
            System.err.println("保存密钥失败,密钥不存在!");
        }
    }
    
    /** *//**
     * 从磁盘读取密钥信息
     * @param filePath
     * @return
     */
    public static SecretKey readKey(String filePath) ...{
        try ...{
            FileInputStream fis = new FileInputStream(filePath);
            fis = new FileInputStream(filePath);
            ObjectInputStream ois = new ObjectInputStream(fis);
            desKey = (SecretKey) ois.readObject();
            ois.close();
            fis.close();
        }catch (FileNotFoundException e) ...{
            System.err.println("读取密钥信息出错,原因:找不到指定的文件!");
        } catch (IOException ex) ...{
            System.err.println("读取密钥信息出错,原因:IO错误!");
            ex.printStackTrace();
        } catch (Exception ex) ...{
            ex.printStackTrace();
        }
        return desKey;
    }
    
    /** *//**
     * 按照指定的算法生成密钥
     * @param algorithm 所指定的算法
     * @return 生成的密钥
     */
    public static SecretKey genKey (String algorithm) ...{
        try ...{
            keyGen = KeyGenerator.getInstance(algorithm);
        } catch (NoSuchAlgorithmException e) ...{
            System.err.println("生成密钥失败,原因:所指定的算法无效!");
            e.printStackTrace();
        }
        desKey = keyGen.generateKey();
        return desKey;
    }
    
    /** *//**
     * 加密已转化为字节串的字符流
     * @param rawByte 原始字节串
     * @return 加密后的字节串
     */
    public static byte[] encryptData(byte[] rawByte) ...{
        if(desKey != null) ...{
            try ...{
                c.init(Cipher.ENCRYPT_MODE, desKey);
                cipherByte = c.doFinal(rawByte);
            } catch (java.security.InvalidKeyException ex) ...{
                System.err.println("加密失败,密钥无效!");
                ex.printStackTrace();
            } catch (javax.crypto.BadPaddingException ex) ...{
                System.err.println("加密失败!");
                ex.printStackTrace();
            } catch (javax.crypto.IllegalBlockSizeException ex) ...{
                System.err.println("加密失败!");
                ex.printStackTrace();
            } catch (Exception ex) ...{
                System.err.println("加密失败!");
                ex.printStackTrace();
            }
        }
        else ...{
            System.err.println("加密失败,原因:密钥不存在!");
        }
        return cipherByte;
    }
    
    /** *//**
     * 解密字节串
     * @param cipherByte 密文字节串
     * @return 解密后的字节串
     */
    public static byte[] decryptor(byte[] cipherByte) ...{
        if(desKey != null) ...{
            try ...{
                c.init(Cipher.DECRYPT_MODE, desKey);
                cipherByte = c.doFinal(cipherByte);
            } catch (java.security.InvalidKeyException ex) ...{
                ex.printStackTrace();
            } catch (javax.crypto.BadPaddingException ex) ...{
                ex.printStackTrace();
            } catch (javax.crypto.IllegalBlockSizeException ex) ...{
                ex.printStackTrace();
            } catch (Exception ex) ...{
                ex.printStackTrace();
            }
            return (cipherByte);
        }
        else ...{
            System.err.println("解密失败,原因:密钥不存在!");
            return null;
        }
    }
    
    public static void main(String[] args) throws Exception ...{
        DESUtil.init();
        DESUtil.genKey("DESede");
        DESUtil.saveKey("desKey.dat");
        byte[] cipherData = DESUtil.encryptData("This is just a test!".getBytes());
        
        String cipherString = new String(new BASE64Encoder().encode(cipherData));
        System.out.println("密文数据为:" + cipherString);
        
        byte[] cipherByte = new BASE64Decoder().decodeBuffer(cipherString);
        String rawString = new String(DESUtil.decryptor(cipherByte));
        System.out.println("解密后的原文为:" + rawString); 
    }

}

 

分享到:
评论

相关推荐

    Java实现文件的RSA和DES加密

    对称加密算法用来对敏感数据等信息进行加密,常用的算法包括 DES、3DES、AES 等。非对称加密算法采用加密钥匙(公钥)和解密钥匙(私钥),常用的算法包括 RSA、DSA、ECC 等。 在选择加密算法时,需要根据实际情况...

    DES文件加密传输

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

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

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

    DES加密解密算法包含txt文件加密,分组加密

    在描述中提到的C++实现的DES加密解密算法,主要是针对TXT文本文件进行操作的。TXT文件是一种常见的文本格式,通常用于存储纯文本信息。DES算法在处理这种文件时,会将文件内容视为二进制数据流,然后按照64位的块...

    对文件进行对称加密(源代码)

    在标题所提到的"对文件进行对称加密(源代码)"中,我们可以推测这是一段实现了对文件加密功能的程序代码。它可能支持用户选择不同的对称加密算法,例如AES,通过提供一个加密与解密的类,使得用户能够对任意类型的...

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

    本文将深入探讨标题中提及的两种主要加密算法:DES(Data Encryption Standard)和RSA,并介绍如何利用它们对文件进行加密。我们将结合描述中的“提供了方便文件加密接口”来阐述如何在实际应用中实现这些加密方法。...

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

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

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

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

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

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

    密码学实验_对称加密算法DES_非对称加密算法RSA.pdf

    DES是一种广泛使用的对称加密算法,它基于Feistel结构,以64位的数据块和64位的密钥进行操作。实验步骤如下: 1. **明文处理**:首先,从文件中读取明文,将其转换为ASCII码,再转换为比特流。每64位分为一组,不足...

    sql server 中进行des加密

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

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

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

    des.rar_DES加密算法C++_c++ des加密_des_des加密算法 C++_对称加密算法

    总的来说,DES加密算法是计算机科学中对称加密的经典例子,虽然在现代已不再作为主要加密标准,但它仍然是理解加密原理和学习密码学的重要教材。通过C++实现DES,不仅可以提升编程技能,还能增强对信息安全的理解。

    DES加密算法实验

    通过对DES加密算法实验的学习,我们不仅掌握了对称加密算法的基本概念,还深入了解了DES算法的具体实现细节。这种理论与实践相结合的学习方式有助于加深对信息安全技术的理解,对于从事相关领域的技术人员来说尤为...

    STM32上实现D3DES加密

    6. **执行D3DES**:首先用第一个密钥执行DES加密,然后用第二个密钥执行DES解密,最后再用第一个密钥进行一次DES加密。这个过程就是D3DES的核心。 7. **密文后处理**:加密完成后,对密文进行逆初始置换,得到最终...

    计算机信息安全对称密钥加密DES源代码(C++版)

    【用C++6.0可直接使用】 1、DES算法工作的基本原理:DES是基于Feistel密码结构的分组密码,其 入口参数有三个:key、data、mode。...当模式为解密模式时,key用于对64位的密文分组进行解密,以 恢复明文。

    DES加密源文件 文件加密

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

    实验一 基于DES加密的TCP聊天程序1

    DES加密需要在数据发送前进行,接收数据后进行解密,这通常涉及在socket编程中集成加密库,如OpenSSL。 4. **安全性和性能**:尽管DES由于其56位密钥的长度现在被认为是不够安全的,但通过三重DES(3DES)可以提高...

    DES文件加密解密算法实现

    这个实现可能包含了密钥的处理、CBC模式的实现以及加密解密的核心逻辑,可以帮助我们理解和应用DES加密算法。然而,由于安全性的考虑,现在更推荐使用更强大的加密算法,如AES(Advanced Encryption Standard)。

    DES对称加密IOS

    DES对称加密 支持IOS,mac编译

Global site tag (gtag.js) - Google Analytics