`
huntingbaby
  • 浏览: 4562 次
  • 性别: Icon_minigender_1
  • 来自: 清远
最近访客 更多访客>>
社区版块
存档分类
最新评论

DES加密、解密例子

    博客分类:
  • J2SE
阅读更多
    关于DES加密、解密之类在JE中也有挺多的例子,也不确定这算不算原创。欢迎学习、感谢拍砖指导!
/**
 * Created by IntelliJ IDEA.
 * User: liangj
 */
public class DesKeyManager {
    public final static String DEFAULT_KEY = "PKCS5Padding";
    protected final static String DES = "DES";
    protected static String key;

    protected String getKey() {
        return key;
    }

    public static void setKey(String key) {
        DesKeyManager.key = key;
    }
}

import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.security.SecureRandom;

/**
 * Created by IntelliJ IDEA.
 * User: liangj
 */
public class DesEncrypt extends DesKeyManager {
    private static DesEncrypt _instance = null;

    private DesEncrypt() {

    }

    public static DesEncrypt getInstance() {
        if (_instance == null) {
            _instance = new DesEncrypt();
        }
        return _instance;
    }

    /**
     * 加密
     * @param key 密匙,其长度必须是8的倍数
     * @param src 数据源
     * @return 返回加密后的数据
     * @throws Exception
     */
    private byte[] encrypt(byte[] key, byte[] src) throws Exception {
        //DES算法需要有一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
        //从原始密匙数据(key)创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
        //创建一个密匙工厂
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        //使用密匙工厂把DESKeySpec转换成一个SecretKey对象
        SecretKey sk = keyFactory.generateSecret(dks);
        //Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance(DES);
        //用密匙初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, sk, sr);

        //现在开始对数据源src进行加密
        return cipher.doFinal(src);
    }

    /**
     * 二进制转换成十六进制
     * @param b
     * @return
     */
    public String byte2hex(byte[] b) {
        String hs = "";
        String stmp;

        for (byte aB : b) {
            stmp = (Integer.toHexString(aB & 0XFF));
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }

        return hs.toLowerCase();
    }

    /**
     * 加密方法
     * @param src 数据源
     * @return
     */
    public String encrypt(String src) {
        try {
            return byte2hex(encrypt(getKey().getBytes(), src.getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String encrypt(byte[] src) {
        try {
            return byte2hex(encrypt(getKey().getBytes(), src));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
import java.security.SecureRandom;

/**
 * Created by IntelliJ IDEA.
 * User: liangj
 */
public class DesDecrypt extends DesKeyManager {
    private static DesDecrypt _instance = null;

    private DesDecrypt() {

    }

    public static DesDecrypt getInstance() {
        if (_instance == null) {
            _instance = new DesDecrypt();
        }
        return _instance;
    }

    /**
     * 解密
     * @param key 密匙,其长度必须是8的倍数
     * @param src 经过DES加密的数据源
     * @return 返回解密后的数据
     * @throws Exception
     */
    private byte[] decrypt(byte[] key, byte[] src) throws Exception {
        //需要创建一个可信任的随机数源对象
        SecureRandom sr = new SecureRandom();
        //从原始密匙数据(src)创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
        //创建一个密匙工厂
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        //使用密匙工厂把DESKeySpec转换成SecretKey对象
        SecretKey sk = keyFactory.generateSecret(dks);
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);
        //用密匙初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, sk, sr);

        //现在开始对数据源src进行解密
        return cipher.doFinal(src);
    }

    /**
     * 十六进制转换成二进制
     * @param b
     * @return
     */
    public byte[] hex2byte(byte[] b) {
        if ((b.length % 2) != 0) {
            throw new IllegalArgumentException("长度不是偶数");
        }
        byte[] b2 = new byte[b.length / 2];
        for (int n = 0; n < b.length; n += 2) {
            String item = new String(b, n, 2);
            b2[n / 2] = (byte) Integer.parseInt(item, 16);
        }
        return b2;
    }

    /**
     * 解密方法
     * @param src 数据源
     * @return
     */
    public byte[] decrypt(String src) {
        try {
            return decrypt(getKey().getBytes(), hex2byte(src.getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public byte[] decrypt(byte[] src) {
        try {
            return decrypt(getKey().getBytes(), hex2byte(src));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }    
}
0
0
分享到:
评论

相关推荐

    cryptopp的des加密解密

    标题"cryptopp的DES加密解密"指出我们将讨论的是使用Cryptopp库进行DES(Data Encryption Standard)加密与解密的方法。Cryptopp是一个强大的、免费的C++类库,提供了多种密码学算法,包括DES,用于数据的安全传输和...

    des加密解密及md5加密

    des加密解密及md5加密.例子及应用!!!

    des加密解密程序(vc)

    在这个"VC下DES加密解密程序"中,我们将会探讨如何在Visual C++环境下实现DES算法。 首先,DES加密算法基于64位的数据块进行操作,但实际有效的密钥长度只有56位,因为有8位用于奇偶校验和设计上的特殊用途。DES...

    3DES加密解密算法

    以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...

    Java版Des加密解密源码

    java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...

    Delphi7与C#实现Des加解密互通Demo,全网找遍只次一份

    标题中的“Delphi7与C#实现Des加解密互通Demo”指的是一个示例项目,该项目旨在演示如何在Delphi 7和C#之间进行DES加密和解密操作,确保两个环境下的数据一致性。全网找遍只此一份,表明这个示例可能比较罕见且具有...

    C#3DES加密解密

    本篇文章将深入探讨C#中实现3DES加密解密的方法。 3DES的工作原理是通过三次应用DES算法来提高安全性。它将明文分成64位的数据块,然后用三个不同的密钥进行三次独立的DES加密过程:一次加密、一次解密、再一次加密...

    des加密解密以及WPF 转圈圈动画

    根据提供的文件信息,我们可以从中提炼出两个主要的知识点:一是关于DES加密解密技术的应用;二是关于WPF中实现转圈圈动画的方法。下面将分别对这两个知识点进行详细阐述。 ### DES加密解密 #### 1. DES简介 数据...

    des加密解密C++实现

    des加密解密的C++实现,该资源提供了完整的例子,调用方便,开发产品时直接参考试用即可

    C#实现DES加解密完整类源码

    - C#提供了一套完整的加密API,位于`System.Security.Cryptography`命名空间下,包括DES类,用于实现DES加密和解密。 3. **创建DES对象**: - 使用`new DESCryptoServiceProvider()`来创建一个DES加密服务提供者...

    js DES 加解密例子

    下面将详细介绍DES加密解密的基本原理、JS实现以及使用时需要注意的事项。 一、DES算法简介 DES算法由IBM公司于1970年代提出,最初是为美国政府设计的标准加密算法。它基于Feistel网络结构,通过16轮迭代过程,将64...

    MD5加密, DES加密解密, RAS加密解密演示实例

    以下是一个DES加密和解密的例子: ```csharp using System; using System.IO; using System.Text; using System.Security.Cryptography; public class DESExample { public static void EncryptFile(string input...

    JAVA实现3DES加密解密

    总的来说,通过Java实现3DES加密解密,我们需要理解加密算法的基本原理,熟悉Java的相关加密库,并掌握如何生成和使用密钥。在实际开发中,确保数据的安全性至关重要,因此正确地使用加密技术是每个IT专业人员必备的...

    DES 加密 解密源码 java版 可运行

    本Java实现的DES加密解密源码提供了一个可运行的例子,这对于理解和学习DES的工作原理非常有帮助。源码中的注释清晰,使得开发者能够快速了解每一步操作的含义。 DES加密过程主要包括以下几个步骤: 1. **Key ...

    des加密解密—JS实例

    本实例将探讨如何使用JavaScript实现DES加密解密功能。 首先,我们需要理解DES的基本原理。DES是一种分组密码,它将明文数据分成64位的数据块,然后用64位的密钥对每个数据块进行加密。实际的DES算法中,有56位是...

    PHP中加密解密函数与DES加密解密实例__1.docx

    接下来,我们探讨DES加密解密。DES是一种古老的块密码算法,标准块大小为64位,有效密钥长度为56位。在PHP中,可以使用`mcrypt`扩展来实现DES加密和解密。这个示例中定义了一个名为`DES`的类,包含了`encrypt`和`...

    DES加密解密算法

    在C#中实现DES加密解密,你需要使用`System.Security.Cryptography`命名空间中的`DESCryptoServiceProvider`类。以下是一个简单的示例: ```csharp using System; using System.IO; using System.Security....

    3des.zip_3DES加密解密_3des_3des java

    在Java中实现3DES加密解密,需要使用`javax.crypto`包中的`Cipher`类。以下是一个简单的3DES加密解密Java示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto....

    C# winform DES加密解密

    本篇将深入探讨"C# winform DES加密解密"这一主题,帮助你理解如何在Windows Forms应用程序中实现数据的加密和解密。 DES(Data Encryption Standard)是一种经典的对称加密算法,它使用56位的密钥对数据进行加密和...

    信息安全编程(DES加密解密算法MFC程序)

    在**MFC(Microsoft Foundation Classes)**框架下编写DES加密解密程序,可以利用MFC提供的类库和事件处理机制,简化Windows应用程序的开发。MFC是一个C++类库,它将Windows API封装成易于使用的对象,帮助开发者...

Global site tag (gtag.js) - Google Analytics