`
fanzhongyun
  • 浏览: 44601 次
  • 性别: Icon_minigender_1
  • 来自: 广东茂名
文章分类
社区版块
存档分类
最新评论

java des算法

    博客分类:
  • java
阅读更多
引用


DES算法是一种双向可逆的加密算法,既可以用来加密信息内容,也能将经DES算法加密后的密文进行解密还原。可用来对地址栏的url进行加密。


DES算法源码:
package fan.des;

import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;

public class DESEncrypt {
  
	  
	  private static String strDefaultKey = "national";   // 字符串默认键值
	  private Cipher encryptCipher = null;		//加密工具
	  private Cipher decryptCipher = null;		//解密工具

	  /**  
	   * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]  
	   * hexStr2ByteArr(String strIn) 互为可逆的转换过程  
	   *   
	   * @param arrB  
	   *            需要转换的byte数组  
	   * @return 转换后的字符串  
	   * @throws Exception  
	   *             本方法不处理任何异常,所有异常全部抛出  
	   */
	  public static String byteArr2HexStr(byte[] arrB) throws Exception {
	    int iLen = arrB.length;
	    // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍   
	    StringBuffer sb = new StringBuffer(iLen * 2);
	    for (int i = 0; i < iLen; i++) {
	      int intTmp = arrB[i];
	      // 把负数转换为正数   
	      while (intTmp < 0) {
	        intTmp = intTmp + 256;
	      }
	      // 小于0F的数需要在前面补0   
	      if (intTmp < 16) {
	        sb.append("0");
	      }
	      sb.append(Integer.toString(intTmp, 16));
	    }
	    return sb.toString();
	  }

	  /**  
	   * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)  
	   * 互为可逆的转换过程  
	   *   
	   * @param strIn  
	   *            需要转换的字符串  
	   * @return 转换后的byte数组  
	   * @throws Exception  
	   *             本方法不处理任何异常,所有异常全部抛出  
	   *  
	   */
	  public static byte[] hexStr2ByteArr(String strIn) throws Exception {
	    byte[] arrB = strIn.getBytes();
	    int iLen = arrB.length;

	    // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2   
	    byte[] arrOut = new byte[iLen / 2];
	    for (int i = 0; i < iLen; i = i + 2) {
	      String strTmp = new String(arrB, i, 2);
	      arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
	    }
	    return arrOut;
	  }

	  /**  
	   * 默认构造方法,使用默认密钥  
	   *   
	   * @throws Exception  
	   */
	  public DESEncrypt() throws Exception {
	    this(strDefaultKey);
	  }

	  /**  
	   * 指定密钥构造方法  
	   *   
	   * @param strKey  
	   *            指定的密钥  
	   * @throws Exception  
	   */
	  public DESEncrypt(String strKey) throws Exception {
	    Security.addProvider(new com.sun.crypto.provider.SunJCE());
	    Key key = getKey(strKey.getBytes());

	    encryptCipher = Cipher.getInstance("DES");
	    encryptCipher.init(Cipher.ENCRYPT_MODE, key);

	    decryptCipher = Cipher.getInstance("DES");
	    decryptCipher.init(Cipher.DECRYPT_MODE, key);
	  }

	  /**  
	   * 加密字节数组  
	   *   
	   * @param arrB  
	   *            需加密的字节数组  
	   * @return 加密后的字节数组  
	   * @throws Exception  
	   */
	  public byte[] encrypt(byte[] arrB) throws Exception {
	    return encryptCipher.doFinal(arrB);
	  }

	  /**  
	   * 加密字符串  
	   *   
	   * @param strIn  
	   *            需加密的字符串  
	   * @return 加密后的字符串  
	   * @throws Exception  
	   */
	  public String encrypt(String strIn) throws Exception {
	    return byteArr2HexStr(encrypt(strIn.getBytes()));
	  }

	  /**  
	   * 解密字节数组  
	   *   
	   * @param arrB需解密的字节数组  
	   * @return 解密后的字节数组  
	   * @throws Exception  
	   */
	  public byte[] decrypt(byte[] arrB) throws Exception {
	    return decryptCipher.doFinal(arrB);
	  }

	  /**  
	   * 解密字符串  
	   *   
	   * @param strIn需解密的字符串  
	   * @return 解密后的字符串  
	   * @throws Exception  
	   */
	  public String decrypt(String strIn) throws Exception {
	    return new String(decrypt(hexStr2ByteArr(strIn)));
	  }

	  /**  
	   * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位  
	   *   
	   * @param arrBTmp 
	   * 构成该字符串的字节数组  
	   * @return 生成的密钥  
	   * @throws java.lang.Exception  
	   */
	  private Key getKey(byte[] arrBTmp) throws Exception {
	    // 创建一个空的8位字节数组(默认值为0)   
	    byte[] arrB = new byte[8];

	    // 将原始字节数组转换为8位   
	    for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
	      arrB[i] = arrBTmp[i];
	    }

	    // 生成密钥   
	    Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");

	    return key;
	  }
}



对以上算法生成相应的工具类(方便使用):
package fan.des;

public class DESUtil {

	private static DESEncrypt des = null;
	public static String fadeInDES(String desStr){
		try {
			  init();
		      return des.encrypt(desStr);
		    }
		    catch (Exception e) {e.printStackTrace();}
		    
		return "";
	}
	
	public static String fadeOutDES(String undesStr){
		try {
			  init();
		      return des.decrypt(undesStr);
		    }
		    catch (Exception e) {e.printStackTrace();}
		return "";
	}
	
	public static void init(){
		
		if(des == null){
			try {
				des = new DESEncrypt("leemenz");	//自定义密钥   
			} catch (Exception e) {e.printStackTrace();}
		}
	}
}



接下来新建一个测试类:

package T;

import fan.des.DESUtil;

public class T {

	public static void main(String[] args) {
		
		      String test = DESUtil.fadeInDES("水清云淡");
		      System.out.println("加密后的字符:" + test);
		      System.out.println("解密后的字符:" + DESUtil.fadeOutDES(test));
		      
	}
}





0
0
分享到:
评论

相关推荐

    delphi,java des算法通用加解密源码

    标题中的"delphi,java des算法通用加解密源码"指的是使用DES(Data Encryption Standard)算法实现的加密和解密功能,适用于两种不同的编程语言:Delphi和Java。DES是一种广泛使用的对称加密算法,它基于块密码设计...

    java des算法 c 实现

    在Java和C等编程语言中,DES算法被广泛用于数据的安全传输和存储。本篇将详细介绍Java JDK内置的DES算法以及如何用C语言实现它。 首先,DES算法基于Feistel结构,使用64位的数据块进行加密,其中包含56位的有效密钥...

    java des算法实现加密文字以及图片

    java的DES算法实现,可以加密文字以及图片,引用java加密的包

    基于java实现的des算法

    基于Java实现的DES算法 作为一个IT行业大师,我将从给定的文件中生成相关知识点。 标题:基于Java实现的DES算法 在这个标题中,我们可以看到这个Java程序的主要功能是实现DES(Data Encryption Standard)算法。...

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    java DES算法实现

    java实现DES算法的加解密,可以直接在编译运行,编码清晰明了

    Java 实现DES算法源码

    总的来说,通过Java实现DES算法,我们需要理解对称加密的概念,了解DES算法的基本工作原理,以及如何使用Java的加密API来操作这些算法。同时,为了保证安全性,现代加密通常使用更强大的算法如AES,以及更安全的密钥...

    DES算法Java实现

    在Java中实现DES算法,主要涉及到`java.security`和`javax.crypto`这两个包。首先,我们需要创建一个`SecretKey`对象,这个对象包含了用于加密和解密的密钥。DES密钥长度固定为64位,但实际有效位只有56位,因为每8...

    java编写的des算法

    用java编写的des算法,通俗易懂,适合学习网络安全的同学借鉴

    DES加解密算法 +16轮每轮输出结果+测试数据

    这个压缩包文件提供了关于DES加解密算法的C源码,这意味着我们可以看到如何在C语言环境下实现DES算法的详细过程。C++6.0编译通过表示这段代码已经在那个版本的编译器下成功编译并运行,这对于理解和复现算法很有帮助...

    3DES算法计算MAC

    下面是一个使用 Java 实现 3DES 算法计算 MAC 的示例代码: * 首先,import 相关的包,例如 `java.security.SecureRandom`、`javax.crypto.Cipher`、`javax.crypto.SecretKey`、`javax.crypto.SecretKeyFactory`、`...

    java实现的des算法

    #### 二、Java实现DES算法的关键点 ##### 1. 密钥生成 在Java中,可以使用`KeyGenerator`类来生成DES密钥。该类提供了初始化密钥生成器的方法,可以通过指定加密算法名称来创建特定类型的密钥生成器实例。 ```java...

    DES算法java实现

    ### DES算法Java实现详解 #### 一、概述 **标题**:“DES算法java实现” **描述**:“DES算法的java实现, 密码编码学的实验二” **标签**:“DES javas” 本文章详细介绍了一种利用Java语言实现的DES(Data ...

    DES算法-Java实现

    在Java中实现DES算法,我们需要理解其工作原理并利用Java的`javax.crypto`包提供的接口。 DES算法主要包含以下几个步骤: 1. **初始置换(IP)**:输入的64位明文首先通过初始置换,将数据重新排列,目的是增加...

    DES算法实现Java

    密码学基础之DES算法的详细过程 体会加密算法的置乱和混沌

    DES算法原理写成java

    用java写的实现DES算法原理

    java用于实现DES算法!

    java代码用于实现DES算法,代码注释相当清楚,一看就明白!

    java版DES算法实现

    总的来说,Java版DES算法实现涉及到了对称加密的基本原理、Java安全套件API的使用、以及在实际开发中如何封装和扩展这些功能。在理解并实现这些知识点后,开发者可以更好地在项目中集成数据加密功能,确保信息安全。

    Des算法Java实现算法

    在Java中实现DES算法,首先需要引入相关的加密库,通常使用的是Java Cryptography Extension (JCE)。以下是一个简化的DES加密过程: 1. **密钥设置**:创建一个DESKeySpec对象,将明文密钥转换成二进制字节数组。 2...

Global site tag (gtag.js) - Google Analytics