`

《DES对称加密的实现及其源代码》

阅读更多
package util;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.*;
import java.io.*;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: Dec 4, 2003
 * Time: 9:29:19 PM
 * To change this template use Options | File Templates.

 *@author xiaoyusong@etang.com
 * 该类是加密处理类.主要用来对数据进行加密,解密操作.
 */
public class DESEncryptUtil {
    /**
     * 获得DES加密的密钥。在交易处理的过程中应该定时更
     * 换密钥。需要JCE的支持,如果jdk版本低于1.4,则需要
     * 安装jce-1_2_2才能正常使用。
     * @return   Key  返回对称密钥
     * @throws java.security.NoSuchAlgorithmException
     * @see util.EncryptUtil 其中包括加密和解密的方法
     */
    public static Key getKey() throws NoSuchAlgorithmException {
        Security.insertProviderAt(new com.sun.crypto.provider.SunJCE(), 1);
        KeyGenerator generator = KeyGenerator.getInstance("DES");
        generator.init(new SecureRandom());
        Key key = generator.generateKey();
        return key;
    }

    /**
     * 将指定的数据根据提供的密钥进行加密
     * @param key  密钥
     * @param data 需要加密的数据
     * @return  byte[] 加密后的数据
     * @throws util.EncryptException
     */
    public static byte[] doEncrypt(Key key, byte[] data) throws EncryptException {
        try {
            //Get a cipher object
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

            //Encrypt
            cipher.init(Cipher.ENCRYPT_MODE, key);
            //byte[] stringBytes = amalgam.getBytes("UTF8");
            byte[] raw = cipher.doFinal(data);
            //BASE64Encoder encoder = new BASE64Encoder();
            //String base64 = encoder.encode(raw);
            return raw;
        } catch (Exception e) {
            e.printStackTrace();
            throw new EncryptException("Do encrypt occurs Exception.[" + e.getMessage() + "]");
        }
    }

    /**
     * 将给定的已加密的数据通过指定的密钥进行解密
     * @param key  密钥
     * @param raw  待解密的数据
     * @return   byte[] 解密后的数据
     * @throws util.EncryptException
     */
    public static byte[] doDecrypt(Key key, byte[] raw) throws EncryptException {
        try {
            //Get a cipher object
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            // Decrypt
            cipher.init(Cipher.DECRYPT_MODE, key);
            //BASE64Decoder decoder = new BASE64Decoder();
            //byte[] raw = decoder.decodeBuffer(data);
            byte[] data = cipher.doFinal(raw);
            //String result = new String(stringBytes, "UTF8");
            //System.out.println("the decrypted data is: " + result);
            return data;
        } catch (Exception e) {
            e.printStackTrace();
            throw new EncryptException("Do decrypt occurs Exception.[" + e.getMessage() + "]");
        }
    }

    /**
     * 得到一个密钥的密码
     * @param key 密钥
     * @param cipherMode 密码的类型
     * @return  Cipher
     * @throws util.EncryptException 当加密出现异常情况时,产生异常信息
     */
    public static Cipher getCipher(Key key, int cipherMode) throws EncryptException {
        try {
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(cipherMode, key);
            return cipher;
        } catch (Exception e) {
            e.printStackTrace();
            throw new EncryptException("Generate Cipher occurs Exception.[" + e.getMessage() + "]");
        }
    }

    public static void main(String[] args) throws Exception {
        Key key = DESEncryptUtil.getKey();
        File file = new File("test.html");//随便找个文件发在当前运行目录下
        FileInputStream in = new FileInputStream(file);
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        byte[] tmpbuf = new byte[1024];
        int count = 0;
        while ((count = in.read(tmpbuf)) != -1) {
            bout.write(tmpbuf, 0, count);
            tmpbuf = new byte[1024];
        }
        in.close();
        byte[] orgData = bout.toByteArray();
        byte[] raw = DESEncryptUtil.doEncrypt(key,orgData);

        file = new File("encrypt_result.dat");
        OutputStream out = new FileOutputStream(file);
        out.write(raw);
        out.close();

        byte[] data = DESEncryptUtil.doDecrypt(key, raw);
        file = new File("decrypt_result.html");
        out = new FileOutputStream(file);
        out.write(data);
        out.flush();
        out.close();
    }
}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

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

    其中,key为加密/解密时使用的 密钥;data为加密/解密的数据;mode为其工作模式:当模式为加密模 式时,明文按照64位进行分组,形成明文分组,此时key用于对数据 加密;当模式为解密模式时,key用于对64位的密文...

    C++ 代码实现DES加密解密源代码类

    文件名"DES"可能指的是源代码文件,包含了上述C++类的实现。通过阅读这个源代码,我们可以了解到如何在C++中使用DES算法进行加密和解密的具体步骤,包括密钥的处理、数据的分块以及迭代过程等。如果需要提高安全性,...

    DES加密解密VB6.0源代码

    DES(Data Encryption Standard)是一种广泛使用的对称加密算法,它基于块加密模式,每个数据块长度为64位,密钥长度为56位。在VB6.0(Visual Basic 6.0)环境中实现DES加密解密是编程中常见的一种需求,主要用于...

    DES加密解密算法 C语言源代码

    DES(Data Encryption Standard)是一种经典的对称加密算法,由IBM在1970年代初开发,1977年被美国国家标准局(NIST)采纳为标准。它使用64位的数据块进行加密和解密,其中包含56位的密钥。DES虽然现在被认为安全性...

    Delphi DES加密算法(带源代码)

    DES(Data Encryption Standard)是一种广泛使用的对称加密算法,由IBM在1970年代开发,并在1977年被美国国家标准局(NIST)采纳为标准。它基于Feistel结构,通过64位的数据块进行加密,使用56位的密钥。尽管现在DES...

    C语言实现的DES对称加密算法

    C语言实现的DES对称加密算法,老师布置的实验作业,原创,花了不少时间才调试成功。

    利用DES加密算法保护Java源代码

    3. **加密源代码**: ```java // 获取Cipher实例 Cipher cipher = Cipher.getInstance("DES"); // 初始化Cipher为加密模式 cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 从文件中读取待加密的数据 ...

    RSA非对称加密和DES对称加密代码示例

    这个"RsaAndDesTest"可能包含了这些功能的具体实现,你可以进一步查看源代码以获取更多信息。 通过了解RSA和DES加密的基本原理以及如何在Java中实现,开发者可以在自己的应用程序中有效地保护数据安全,确保通信的...

    DES加密算法源代码

    理解这些知识点后,你可以通过阅读源代码来深入学习DES加密算法的具体实现细节,包括如何组织数据,如何进行密钥扩展,以及在每轮迭代中如何应用S盒和D盒操作。这将有助于你掌握密码学基础和C++编程技巧。

    DES加密算法实验源代码

    DES(Data Encryption Standard)是一种经典的对称加密算法,1976年由美国国家标准局发布,广泛应用于数据安全领域。此“DES加密算法实验源代码”是用于教学实验,旨在帮助学习者深入理解DES的工作原理和实际操作...

    DES数据加密算法 加密算法源代码

    DES(Data Encryption Standard)数据加密标准是一种经典的对称加密算法,由IBM在1970年代初开发,并在1977年由美国国家标准局(NIST)采纳为联邦信息处理标准(FIPS)。DES在密码学领域具有重要的历史地位,尽管它...

    des算法加密解密源代码C++

    在给定的C++源代码片段中,我们可以看到以下关键组成部分: - **初始化置换表(IP)**:`const static char ip[]`定义了初始置换的顺序,它是一个64位的数组,每个值对应原始64位明文的某一位。 - **最终置换表...

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

    本文将深入探讨对称加密的概念、工作原理,以及如何通过源代码实现文件的对称加密与解密。 对称加密是一种加密方法,其中加密和解密过程使用的是同一个密钥。这种方式简单高效,适用于大量数据的加密,因为它的计算...

    Java利用DES私钥对称加密实例

    Java中的DES(Data Encryption Standard)是一种广泛使用的对称加密算法,它基于一个固定的密钥进行数据的加密和解密。这个实例将详细讲解如何在Java...通过分析这些代码,你可以更好地理解和实践Java中的DES对称加密。

    C#编写的DES算法加密器+源代码

    标题中的"C#编写的DES算法加密器+源代码"指的是使用C#编程语言实现的数据加密标准(DES)算法。DES是一种古老的对称加密算法,它使用一个56位的密钥来加密64位的数据块。尽管现在DES由于其相对较短的密钥长度已被...

    DES加密算法文档+源代码

    这是一份实现DES加密算法的C语言源代码和描述DES算法的详细文档,为了便于理解算法的代码实现,还给出了一份详细中文注释的阅读代码, 在网上搜到的很多文档都讲的不是很清楚,希望这份文档能让你理解DES算法,并...

    一个简单的Des字串加密源代码

    标题中的“一个简单的Des字串加密源代码”指的是使用DES(Data Encryption Standard)算法进行字符串加密的编程示例。DES是一种对称加密算法,广泛应用于数据保护和信息安全领域。它基于64位的数据块和56位的密钥...

    DES加密源代码

    DES(Data Encryption Standard)是一种经典的对称加密算法,由IBM公司于...如果需要深入理解或分析特定的DES加密源代码,需要提供实际的源代码文件。不过,理解上述理论知识将有助于你理解和编写自己的DES加密程序。

    DES加密解密源代码

    DES(Data Encryption Standard)是一种广泛使用的对称加密算法,它基于Feistel结构,通过16轮迭代过程将64位的数据块转化为密文。在这个过程中,原始数据经过初始置换、扩展置换、异或操作、轮函数等步骤,每轮都有...

    DES加密算法(c语言实现)

    提供的压缩包文件6e6cbd12c84540d1aa029a55025426a4可能包含了C语言实现DES加密算法的源代码。通过阅读和理解这些代码,你可以深入学习DES算法的实现细节,如如何进行位操作、如何构造S盒和P盒、以及如何进行迭代...

Global site tag (gtag.js) - Google Analytics