`

简单的例子3des对称加密的代码

    博客分类:
  • JAVA
 
阅读更多

一个简单的3des对称加密对象

 

 package com.bruce.geekway.utils;

import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;


public class EncryptUtils {

	private static final String Algorithm = "DESede"; // 定义加密算法,可用,DES,DESede,Blowfish
	
	private static final String KEY = "jk#la$sf%jl9(ksd)gh-sd+sad=HyUWz";

	/**
	 * 3des解码
	 * 
	 * @param value
	 *            待解密字符串
	 * @param key
	 *            原始密钥字符串
	 * @return
	 * @throws Exception
	 */
	public static String Decrypt3DES(String value, String key) throws Exception {
		byte[] b = decryptMode(GetKeyBytes(key), Base64.getDecoder().decode(value));
		return new String(b);
	}
	
	
	/**
	 * 3des解码
	 * 
	 * @param value
	 *            待解密字符串
	 * @param key
	 *            原始密钥字符串
	 * @return
	 * @throws Exception
	 */
	public static String Decrypt3DES(String value) throws Exception {
 		byte[] b = decryptMode(GetKeyBytes(KEY), Base64.getDecoder().decode(value));
		return new String(b);
	}
	

	/**
	 * 3des加密
	 * 
	 * @param value
	 *            待加密字符串
	 * @param key
	 *            原始密钥字符串
	 * @return
	 * @throws Exception
	 */
	public static String Encrypt3DES(String value, String key) throws Exception {
		return byte2Base64(encryptMode(GetKeyBytes(key), value.getBytes()));
	}
	
	
	/**
	 * 3des加密
	 * 
	 * @param value
	 *            待加密字符串
	 * @param key
	 *            原始密钥字符串
	 * @return
	 * @throws Exception
	 */
	public static String Encrypt3DES(String value) throws Exception {
 		return byte2Base64(encryptMode(GetKeyBytes(KEY), value.getBytes()));
	}
	

	/**
	 * 计算24位长的密码byte值,首先对原始密钥做MD5算hash值,再用前8位数据对应补全后8位
	 * 
	 * @param strKey
	 *            密钥
	 * @return
	 * @throws Exception
	 */
	public static byte[] GetKeyBytes(String strKey) throws Exception {
		if (null == strKey || strKey.length() < 1)
			throw new Exception("key is null or empty!");
		MessageDigest alg = MessageDigest.getInstance("MD5");
		alg.update(strKey.getBytes());
		byte[] bkey = alg.digest();
		int start = bkey.length;
		byte[] bkey24 = new byte[24];
		for (int i = 0; i < start; i++) {
			bkey24[i] = bkey[i];
		}
		for (int i = start; i < 24; i++) {// 为了与.net16位key兼容
			bkey24[i] = bkey[i - start];
		}
		return bkey24;
	}

	/**
	 * 加密
	 * 
	 * @param keybyte为加密密钥
	 *            ,长度为24字节
	 * @param src
	 *            为被加密的数据缓冲区(源)
	 * @return
	 */
	public static byte[] encryptMode(byte[] keybyte, byte[] src) {
		try {
			// 生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密
			Cipher c1 = Cipher.getInstance(Algorithm);
			c1.init(Cipher.ENCRYPT_MODE, deskey);
			return c1.doFinal(src);
		} catch (java.security.NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();
		} catch (java.lang.Exception e3) {
			e3.printStackTrace();
		}
		return null;
	}

	/**
	 * 解密
	 * 
	 * @param keybyte
	 *            解密密钥,长度为24字节
	 * @param src
	 *            解密后的缓冲区
	 * @return
	 */
	public static byte[] decryptMode(byte[] keybyte, byte[] src) {
		try {
			// 生成密钥
			SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
			// 解密
			Cipher c1 = Cipher.getInstance(Algorithm);
			c1.init(Cipher.DECRYPT_MODE, deskey);
			return c1.doFinal(src);
		} catch (java.security.NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		} catch (javax.crypto.NoSuchPaddingException e2) {
			e2.printStackTrace();
		} catch (java.lang.Exception e3) {
			e3.printStackTrace();
		}
		return null;
	}

	/**
	 * 转换成base64编码
	 */
	public static String byte2Base64(byte[] b) {
		return Base64.getEncoder().encodeToString(b);
	}

	/**
	 * 转换成十六进制字符串
	 */
	public static String byte2hex(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
			if (n < b.length - 1)
				hs = hs + ":";
		}
		return hs.toUpperCase();
	}

	/**
	 * 3DEC 加密解密测试
	 */
	public static void main(String[] args) throws Exception {
		
		System.out.println(" key = " + KEY);
		
		String password = "tester-99888777-60";
		
		String enStr =  EncryptUtils.Encrypt3DES(password);
		System.out.println("调用原始密钥算加密结果:" + enStr);

		System.out.println("调用原始密钥算解密结果:" + EncryptUtils.Decrypt3DES(enStr));
		
		System.out.println("在URL中需要做下编码" + URLEncoder.encode(enStr, "utf-8"));
	}

}

 

 

分享到:
评论

相关推荐

    基于java的开发源码-利用DES私钥对称加密代码实例.zip

    基于java的开发源码-利用DES私钥对称加密代码实例.zip 基于java的开发源码-利用DES私钥对称加密代码实例.zip 基于java的开发源码-利用DES私钥对称加密代码实例.zip 基于java的开发源码-利用DES私钥对称加密代码实例....

    C#实现3DES对称加密

    3DES(Triple Data Encryption Algorithm)是一种广泛应用的对称加密算法,它基于DES(Data Encryption Standard)并增强了安全性。本篇文章将详细探讨如何在C#环境中使用3DES进行数据加密,特别针对VS2005编译环境...

    计算机信息安全对称密钥加密DES源代码(C++版)

    1、DES算法工作的基本原理:DES是基于Feistel密码结构的分组密码,其 入口参数有三个:key、data、mode。 其中,key为加密/解密时使用的 密钥;data为加密/解密的数据;mode为其工作模式:当模式为加密模 式时,...

    DES对称加密IOS

    DES对称加密 支持IOS,mac编译

    RSA非对称加密和DES对称加密代码示例

    其中,RSA非对称加密和DES对称加密是两种常见的加密算法。这篇文章将详细介绍这两种加密方法,并通过代码示例进行阐述。 **RSA非对称加密** RSA(Rivest-Shamir-Adleman)是非对称加密算法的代表,由Ron Rivest、...

    密码学实验_对称加密算法DES_非对称加密算法RSA.pdf

    本实验报告主要涉及两种加密算法:对称加密算法DES(Data Encryption Standard)和非对称加密算法RSA。实验旨在帮助学生深入理解这两种算法的基本原理,并通过Python编程实现加密和解密过程。 ### **对称加密算法...

    java实现DES对称加密

    总之,Java实现DES对称加密涉及了密码学的基础知识,包括密钥生成、加密解密过程等。虽然DES的原始安全性已受到质疑,但它依然作为理解对称加密概念的一个实例。开发者应根据实际需求和安全标准选择合适的加密算法和...

    DES对称加密算法纯C代码

    DES对称加密算法 纯C代码 绝对优化算法 如假包换56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, ...

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

    以下是一个简单的Java代码示例,展示了如何使用DES进行私钥对称加密: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec....

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

    Java中的DES(Data Encryption Standard)是一种广泛使用的对称加密算法,它基于一个固定的密钥进行数据的加密和解密。这个实例将详细讲解如何在Java...通过分析这些代码,你可以更好地理解和实践Java中的DES对称加密。

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

    7. **代码实例**:在提供的压缩包文件"Java利用DES私钥对称加密代码实例"中,应该包含了具体的Java代码示例,这些示例通常会展示如何生成密钥、进行加密和解密的完整流程。你可以通过阅读和运行这些代码,更好地理解...

    DES对称加密

    DES对称加密 是一种很早有IBM实现的对称加密!

    STM32上实现D3DES加密

    总之,STM32上的D3DES实现涉及到硬件支持、软件库选择、加密算法理解、代码实现以及安全实践等多个方面,需要综合考虑性能、安全性和资源利用率。通过深入学习和实践,你将能够成功地在STM32上实现D3DES加密功能。

    3Des对称加密在JS实现

    3Des对称加密在JS实现,此处代码要与https://blog.csdn.net/yufang131/article/details/79869964文章一起看(只包含JS部分)。《三重Des对称加密在JS、Android、Ios 和Java 平台的实现(多加一个JS实现)》

    Des对称加密解密

    使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储.

    C语言实现的DES对称加密算法

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

    DES对称加密算法Java实现

    DES算法为密码体制中的对称密码体制,是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。 这里以Java代码实现DES算法。

    C++ 代码实现DES加密解密源代码类

    DES(Data Encryption Standard)是一种经典的对称加密算法,由IBM公司设计,并在1977年被美国国家标准局(NIST)采纳为标准。它的全称为数据加密标准,主要用于保护电子数据的安全。DES使用了64位的密钥,但其中...

    一个简单的Des字串加密源代码

    标题中的“一个简单的Des字串加密源代码”指的是使用DES(Data Encryption Standard)算法进行字符串加密的编程示例。DES是一种对称加密算法,广泛应用于数据保护和信息安全领域。它基于64位的数据块和56位的密钥...

    AES/DES 对称加密算法

    DES、AES对称加密算法,之前从网上找的,但是在MAC上运行发现每次加密出来的结果都不一样,后来查了一些博客,最后确认是SecureRandom的随机算法问题,需要设置setSeed.

Global site tag (gtag.js) - Google Analytics