`

Java DES 加密和解密实例

 
阅读更多
一、Java密码学结构设计遵循两个原则:

1) 算法的独立性和可靠性。

2) 实现的独立性和相互作用性。

算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。

二、DES算法及如何利用DES算法加密和解密类文件的步骤:

DES算法简介
DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

三、实现过程:
package com.afreon.util;
import java.io.IOException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
public class DesUtil {
 
    private final static String DES = "DES";
 
    public static void main(String[] args) throws Exception {
	// 需要加密的数据
        String data = "123 456";
	// 密钥(随便定义)
        String key = "huang(*^+++!@#$%"; 
        System.err.println("加密后的字符串:" + encrypt(data, key));
        System.err.println("解密后的数据:" + decrypt(encrypt(data, key), key));
 
    }
     
    /**
     * Description 根据密钥,对数据进行加密
     * @param data 需要加密的str
     * @param key  密钥
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
        byte[] bt = encrypt(data.getBytes(), key.getBytes());
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }
 
    /**
     * Description 根据密钥,对数据进行解密
     * @param data 需要解密的str
     * @param key  密钥
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
            Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf,key.getBytes());
        return new String(bt);
    }
 
    /**
     * Description 根据密钥,对数据进行加密
     * @param data 需要加密的byte数组
     * @param key  密钥byte数组
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance(DES);
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }
     
     
    /**
     * Description 根据密钥,对数据进行解
     * @param data 需要解密byte数组
     * @param key  密钥byte数组
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }
}
分享到:
评论

相关推荐

    JAVA数据加密解密的实例

    总的来说,这个实例为我们展示了如何在Java中使用DES加密算法进行数据加密和解密。在实际开发中,为了增强安全性,开发者通常会转向更强大的加密算法(如AES),并结合安全的密钥管理和存储机制。同时,非对称加密和...

    des加密解密java实现版本

    在`cipher4j-master`这个项目中,可能包含了关于DES加密解密的Java实现,包括完整的类和示例代码,帮助开发者理解和使用DES。你可以下载并研究该项目,进一步了解如何在实际应用中集成DES加密解密功能。

    DES加密 java与.net可以相互加密解密两种方法

    本文将详细介绍如何在Java和.NET中实现互操作的DES加密解密,并提供两种不同的方法。 **方法一:使用标准库** 1. **Java实现**: - 引用`javax.crypto`包中的`Cipher`、`KeyGenerator`和`SecretKey`类。 - 创建`...

    用delphi写的一个des的加密解密小程序,java写的des的一个类

    总之,这个压缩包提供了一个用Delphi编写的DES加密解密工具和一个用Java实现的DES类,对于学习和理解DES算法以及在不同编程环境中如何实现它非常有帮助。同时,这也涉及到密钥管理和加密安全的实践问题,对于软件...

    Java中的DES加密和解密

    ### Java中的DES加密和解密 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称加密算法。它最初由IBM公司开发,并在1970年代中期被美国国家标准局(现为国家标准与技术研究院...

    JAVA数据加密解密的实例+Java源码

    在Java编程语言中,数据加密和...通过学习和实践这些Java加密解密的实例,你可以更好地理解和掌握如何在实际项目中保护数据安全,提升系统的信息安全性。记得在使用这些技术时,遵守相关的法律法规,不要用于非法目的。

    Des加密解密源码——JAVA版

    总的来说,这个资源包提供了一个完整的JAVA实现DES加密解密的实例,涵盖了从密钥生成、子密钥计算、加密解密操作到文件处理的全过程。对于想要深入理解和使用DES算法的Java开发者来说,这是一个非常有价值的参考资料...

    des加密解密(java和c语言互通)

    在本项目中,“des加密解密(java和c语言互通)”指的是实现了一个能够在Java和C语言之间无缝进行DES加密和解密的解决方案。一周的开发工作旨在确保两个不同编程语言编写的程序可以相互读取和处理由DES算法加密或...

    Python和Java进行DES加密和解密的实例

    "Python和Java进行DES...本文通过Java和Python两种语言实现了DES加密和解密的示例代码,展示了如何使用DES加密算法来实现数据的加密和解密。同时,本文还介绍了DES加密算法的基本概念和特点,以及实例应用场景的应用。

    DES加密DEMO(C#与JAVA)

    - **javax.crypto命名包**:JAVA中使用`javax.crypto.Cipher`类配合`DESKeySpec`和`SecretKeyFactory`实现DES加密解密。首先需要创建`DESKeySpec`对象,然后通过`SecretKeyFactory`生成`SecretKey`,再用`Cipher`...

    DES加密解密实例网络安全传输系统

    在"DES加密解密实例网络安全传输系统"中,DES算法用于确保在网络上传输的数据不被未授权的第三方获取或篡改。数据在发送端使用DES加密,变为密文,然后通过网络发送到接收端。接收端接收到密文后,使用同样的DES密钥...

    java和C#通用des3加解密

    标题中的“java和C#通用des3加解密”指的是在Java和C#这两种不同的编程语言中实现DES(Data Encryption Standard)的加强版——3DES(Triple DES)加解密算法。3DES是一种广泛使用的对称加密算法,通过三次应用DES的...

    DES加密与解密实例111

    DES加密和解密,用于用户验证,INI存储密码或验证用户注册信息等等有奄码

    DES加密解密 java + js

    在Java和JavaScript中,我们都可以实现DES的加密和解密功能,以确保数据的安全传输和存储。 在Java中,我们可以使用`javax.crypto`包中的`Cipher`类来实现DES加密和解密。首先,我们需要创建一个`SecretKeySpec`...

    带界面的DES加密解密java源码

    DES(Data Encryption Standard)是一种经典的对称加密算法,由IBM在1970年代初开发,后被美国国家标准局(NIST)采纳为标准。...通过对这些源码的学习和分析,可以深入了解DES加密解密的原理以及Java中如何实现。

    DesEncrypt.rar_DesEncrypt java_des 加密与解密_desencrypt_java desencr

    标题中的"DesEncrypt.rar_...综上所述,这个资源提供了Java中实现DES加密和解密的实例,涵盖了从基本的加密算法理解到具体编程实现的多个层次的知识点,对于学习和理解DES加密机制以及在Java环境下的实现非常有帮助。

    用于 Arduino微控制器平台 的 DES 和 Triples DES 加密和解密_C++_代码_相关文件_下载

    用于 Arduino 微控制器平台的 DES 和 Triples DES 加密和解密库 Arduino IDE 要安装库,下载文件并将其复制到 Arduino 开发环境的“libraries”文件夹中的子文件夹(例如“DES”)中。 该库在 Arduino Leonardo 上...

    JAVA加密和解密的艺术(第二版).zip

    这些代码实例可以帮助读者更好地理解和实践加密解密操作。 书中还涉及了现代密码学的热点问题,如椭圆曲线加密(ECC)、混沌密码学和量子密码学的简介,这些都是当前和未来密码学研究的重点。此外,对于Java开发者...

    DESPlus.zip_DES JAVA_Des加密解密_des

    在这个名为"DESPlus.zip_DES JAVA_Des加密解密_des"的压缩包中,包含了一个名为"DESPlus.java"的源代码文件,这是一个关于如何在Java中使用DES进行加密和解密的实例。 DES是一种块密码,它的基本思想是将明文数据...

    DES加密 解密 方法 MFC

    DES加密 解密 方法: DESr DESw 支持3DES加密 解密 类中利用函数重载的方式 实现两种加密方式 加密后为16进制字符串 使用方法: 实例化一个对象 然后就可以随便用了。 如 DES加密 解密 CString sd,sd2; yxyDES2 ...

Global site tag (gtag.js) - Google Analytics