`
binge520cn
  • 浏览: 23313 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

java中DES加密或解密

    博客分类:
  • java
阅读更多
/**
* java中DES加密或解密
*/
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;


/**
* 通过DES算法,加密或解密数据
* @author sunlightcs
* 2011-4-29
* http://hi.juziku.com/sunlightcs/
*/
public class EncryptCode {
	private final static String DES = "DES";
	
	/**
	 * DES加密KEY
	 */
	public final static String DES_KEY = "test_key";
	
	 
    /**
     * 加密
     * @param src 数据源
     * @param key 密钥,长度必须是8的倍数
     * @return    返回加密后的数据
     * @throws Exception
     */
    public static byte[] encrypt(byte[] src, byte[] key) throws RuntimeException {
        //      DES算法要求有一个可信任的随机数源
        try{
            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(src);
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }
     
    /**
     * 解密
     * @param src   数据源
     * @param key   密钥,长度必须是8的倍数
     * @return      返回解密后的原始数据
     * @throws Exception
     */
    public static byte[] decrypt(byte[] src, byte[] key) throws RuntimeException {
        try{
            //      DES算法要求有一个可信任的随机数源
            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(src);
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }
    /**
     * DES数据解密
     * @param data
     * @param key 密钥
     * @return
     * @throws Exception
     */
    public final static String decrypt(String data, String key){
        return new String(decrypt(hex2byte(data.getBytes()),key.getBytes()));
    }
    /**
     * DES数据加密
     * @param data
     * @param key 密钥
     * @return
     * @throws Exception
     */
    public final static String encrypt(String data, String key){
        if(data!=null)
        try {
            return byte2hex(encrypt(data.getBytes(),key.getBytes()));
        }catch(Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }
 
    /**
     * 二行制转字符串
     * @param b
     * @return
     */
    private static String byte2hex(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b!=null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toUpperCase();
    }
     
    private static 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;
    }
    
    
    
    public static void main(String[] args) {
		String test = "测试DES加密解密";
		
		//DES加密
		test = encrypt(test, DES_KEY);
		
		System.out.println("加密后的数据:" + test);
		
		
		
		//DES解密
		test = decrypt(test, DES_KEY);
		
		System.out.println("解密后的数据:" + test);
	}
	
}

 java中DES加密或解密,很多场合都会用到DES加密或解密,如:邮箱验证等。

 

 

分享到:
评论

相关推荐

    java 3des加密、解密工具类

    java 3des加密、解密工具类 java的3DES加密/解密

    java和javascript之间的DES加密解密

    Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...

    Java中3DES加密解密示例(封装byte数组16进制互转)

    Java 中的 3DES 加密解密示例(封装 byte 数组和 16 进制字符串互转) 在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES ...

    java的DES加密解密

    java的DES加密解密:用于密码在数据库的加密,解码类

    Des.JAVA.rar_DES.java_DES加密_java DES 128bit_java des_加密解密

    总的来说,这个压缩包提供了一套完整的Java实现的DES加密解密工具,包括核心算法、子密钥生成、文件加密等功能,对于学习DES算法和在Java项目中使用DES加密的开发者来说,是一个非常实用的资源。使用者可以通过阅读...

    des加密算法(js+java)js加密 java解密

    des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...

    des加密解密java实现版本

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

    java_DES加密解密源码.rar_DES加密_des_java DES_java des_加密 解密

    Java实现des加密解密算法,des加密解密算法

    java php DES 加密解密

    总之,无论是在Java还是PHP中,DES加密解密都需要生成密钥、创建加密/解密对象、执行加密或解密操作,并确保在传输或存储时安全地处理密钥。随着技术的发展,尽管DES已经不再推荐用于新的安全设计,但了解它的使用...

    java实现DES加密、解密算法

    本文将详细介绍如何在Java环境中实现DES加密和解密。 DES,全称为数据加密标准,基于Feistel密码结构,采用64位的密钥,但其中只有56位是真正参与加密过程的。DES分为两个主要阶段:加密和解密,这两个过程使用相同...

    DES加密解密一套JAVA&IOS

    本资源"DES加密解密一套JAVA&IOS"提供了一套跨平台的解决方案,允许JAVA和iOS应用之间进行互操作性的加密和解密操作。 在JAVA平台上,DES加密和解密通常通过Java的`javax.crypto`包来实现。这个包提供了`Cipher`类...

    小程序+java后端统一 des 加密解密

    总的来说,小程序与Java后端使用DES加密解密是数据安全的一种基础实践,但考虑到当前的网络安全需求,可能需要结合其他更强的加密技术以及安全策略来提升整体的安全水平。在实际应用中,还需要关注相关的法律法规,...

    Java版Des加密解密源码

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

    java-des.zip_Des加密解密_des_java des_java 加密解密

    des加密解密算法,通过DES加密解密实现一个String字符串的加密和解密.

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

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

    DesEncrypt.rar_DesEncrypt java_des 加密与解密_desencrypt_java desencr

    标题中的"DesEncrypt.rar_DesEncrypt java_des 加密与解密_desencrypt_java desencr"表明这是一个关于使用Java实现DES加密和解密技术的资源。DES(Data Encryption Standard)是一种广泛使用的对称加密算法,它使用...

    java-des加密解密程序

    java-des加密解密程序,基于java编写的des,3des加密程序,包括MAC校验,MD5校验等

    Java DES 加密/解密

    Java版标准3DES加密/解密方法,加密函数desedeEncoder(String paramString1, String key) 解密函数desedeDecoder(String dest, String key)

    DES加密解密java工具类

    DES加密解密java工具类 public static final String KEY_ALGORITHM = "DES"; public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5PADDING"; validKeySpecException, NoSuchPaddingException, ...

    实现使用3des在页面js加密,后台java解密

    本篇将详细介绍如何在网页前端使用JavaScript进行3DES加密,并在后端Java环境中进行解密。 一、3DES加密原理 3DES是DES的加强版,它使用了3个不同的56位密钥,通过3次独立的DES加密过程来提高安全性。具体流程如下...

Global site tag (gtag.js) - Google Analytics