`
nasizq
  • 浏览: 43770 次
  • 性别: Icon_minigender_1
  • 来自: 叶柏寿
社区版块
存档分类
最新评论

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对称加密算法

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

    DES加密算法源代码--好用啊~!

    当前成熟的加密算法之一,加密能力较强,采用对称加密

    DES加密软件源代码

    这是一个用于windows系统下的各种格式文件的加密解密的软件,使用DES/3DES对称加密算法实现的加密功能

    des加密算法 C语言源码

    des加密算法 C语言源码 基于对称密码学的加密算法 网络安全加密

    DES加密算法基本功能Java实现源程序

    DES加密算法基本功能Java实现源程序 确保“aa.txt”文件存在且在同一个目录中,否则将会报找不到加密文件的错误!

    对称密码之DES实验源代码

    故有效密钥长度是56位,分为左右两半,各为28位,分别循环左移后合并,进入置换选择PC2,变为48位,将结果与扩展后的R0异或,进入函数组S1,变为32位,再进入置换选择P,输出加密函数f,函数f与L0异或,其结果成为R1...

    DES加密Verilog模块设计

    加密的历史可以追溯到公元前2000年的古埃及,当时人们只是运用简单的象形文字,到现在已经有各种各样的加密技术,而DES加密是采用对称密钥加密法,即用相同密钥进行加密和解密。 本文对DES加密模块的设计进行了详细...

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

    摘要:Java源码,算法相关,对称加密 Java对称加密实例源码,解释如何利用DES私钥加密算法加解密,定义加密算法,可用 DES,DESede,Blowfish。  用密钥加密明文(message),生成密文(cipherText),操作模式为加密(Cipher....

    Java非对称加密源码实例

    摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)...

    C# des对称加密字符串实例

    摘要:C#源码,加密解密,DES,对称加密 运行环境:Visual Studio2010

    Java非对称加密_java_

    Java非对称加密源程序代码,使用RSA加密技术,定义加密算法可用 DES

    DES.rar_VC 图像加密

    基于分组技术的图像加密算法 采用对称分组技术,即DES算法进行加密的vc++源代码

    C++中四种加密算法之DES源代码

    DES算法是一种最通用的对称密钥算法,因为算法本身是公开的,所以其安全性在于密钥的安全性。基于密钥的算法通常有两类:对称算法和公开密钥算法。对称算法的对称性体现在加密密钥能够从解密密钥推算出来,反之亦然...

    c# 加密和解密相关代码

    用,没有必要作类似于PGP、RSA 或DES 等复杂的加密算法。本实例介绍如何使用ROT13 算法加密和解密数 C#开发实战1200 例(第II卷) 832 据。实例运行效果如图19.3 所示。 图19.3 使用ROT13算法加密解密数据 关 键技术...

    C#中对称加密算法的踩坑日常记录

    有幸接触了一下传说中的对称加密算法3DES 感觉这些加密算法与我的工作是想去甚远的,一般没什么机会接触这些东西 今次了解了一下3DES这个对称算法 原理算不上明白,算是踩了C#中的一些坑吧 C#中对于密钥的处理比较...

    JAVA上百实例源码以及开源项目源代码

    Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...

    基于Java的两个通用安全模块的设计与实现(源代码+论文)

    SSL协议采用RSA, DES等加密技术来实现数据的保密性,采用MD5信息摘要算法等来实现数据的完整性,使用数字证书进行身份认证。 2. SSL协议体系结构 SSL协议是一个中间层协议,在OSI模型中,SSL介于传输层(如TCP/IP)...

    Java加密与解密的艺术配书源代码

    文件校验209 6.8 小结211 第7章初等数据加密—对称加密算法213 7.1 对称加密算法简述213 7.2 数据加密标准—DES 214 7.3 三重DES—DESede 222 7.4 高级数据加密标准—AES 227 7.5 国际数据加密标准—IDEA 232 7.6 ...

    信息安全实验报告.zip

    1.通过用 DES 算法对实际数据进行加密和解密来深刻了解 DES 的运行原理,进而加深对 对称加密算法的理解与认识。 2.了解入侵检测系统的基本概念和工作原理。 掌握 scanport 入侵检测系统。 将一个文本文件隐藏到另一...

Global site tag (gtag.js) - Google Analytics