⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encrypttool.java

📁 通过java方式实现的DESEDE加密算法,其中包括选区择不同的模式与填充方式进行的加密结果
💻 JAVA
字号:
package com.des.test;

import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 
 * 
 * CryptTool 封装了一些加密工具方法, 包括 3DES, MD5 等.
 * 
 * 
 * @author BeanSoft
 * @version 1.0 2004-05-12
 */
public class EncryptTool {
	public EncryptTool() {
	}

	/**
	 * 生成3DES密钥.
	 * 
	 * @param key_byte
	 *            seed key
	 * @throws Exception
	 * @return javax.crypto.SecretKey Generated DES key
	 */
	public static javax.crypto.SecretKey genDESKey(byte[] key_byte)
			throws Exception {
		SecretKey k = null;
		k = new SecretKeySpec(key_byte, "DESede");
		return k;
	}

	/**
	 * 3DES 解密(byte[]).
	 * 
	 * @param key
	 *            SecretKey
	 * @param crypt
	 *            byte[]
	 * @throws Exception
	 * @return byte[]
	 */
	public static byte[] desDecrypt(javax.crypto.SecretKey key, byte[] crypt)
			throws Exception {
		javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("DESede",
				"SunJCE");
		cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key);
		return cipher.doFinal(crypt);
	}

	/**
	 * 3DES 解密(String).
	 * 
	 * @param key
	 *            SecretKey
	 * @param crypt
	 *            byte[]
	 * @throws Exception
	 * @return byte[]
	 */
	public static String desDecrypt(javax.crypto.SecretKey key, String crypt)
			throws Exception {
		return new String(desDecrypt(key, crypt.getBytes()));
	}

	/**
	 * 3DES加密(byte[]).
	 * 
	 * @param key
	 *            SecretKey
	 * @param src
	 *            byte[]
	 * @throws Exception
	 * @return byte[]
	 */
	public static byte[] desEncrypt(javax.crypto.SecretKey key, byte[] src)
			throws Exception {

		javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("DESede",
				"SunJCE");
		cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
		return cipher.doFinal(src);
	}

	/**
	 * 3DES加密(String).
	 * 
	 * @param key
	 *            SecretKey
	 * @param src
	 *            byte[]
	 * @throws Exception
	 * @return byte[]
	 */
	public static String desEncrypt(javax.crypto.SecretKey key, String src)
			throws Exception {
		return new String(desEncrypt(key, src.getBytes()));
	}

	/** Test crypt */
	public static void main(String[] args) {
		// Security.addProvider(new com.sun.crypto.provider.SunJCE());
		// 明文

		String src_string = "1362223434";
		byte src_byte[] = src_string.getBytes();
		System.out.println("明文:" + src_string);
		System.out.println("明文长度:" + src_byte.length);
		// 密钥
		String key_string = "333456781234567812345678";
		// Lc2F4Wi130TSr/J2WAH8zw==
		// nxkysZBvCVTzpNSFvrrP0w==
		// lOOHriXpubu/Av6vBXpyHg==
		byte key_byte[] = key_string.getBytes(); // 3DES 24
		// bytes key
		System.out.println("密钥内容:" + key_string);
		System.out.println("密钥长度:" + key_byte.length);

		Provider[] pd = Security.getProviders();
		for (int i = 1; i <= (pd.length); i++) {
			System.out.println("Provider[" + i + "]=" + pd[i - 1].getName());
		}

		try {
			// 生成DES密钥
			javax.crypto.SecretKey deskey;
			// 生成DES密钥

			deskey = genDESKey(key_byte);
			System.out.println("生成后的密钥:Generator DES KEY OK:  " + deskey);

			// DES加解密
			byte[] encrypt, decrypt;
			// 加密
			encrypt = desEncrypt(deskey, src_byte);
			// 加密后的密文
			String enc_string = new String(encrypt);
			System.out.println(enc_string.getBytes().length + " 加密后的密文:"
					+ enc_string);

			// BASE64Encoder通过这个类对密码进行BASE64转码,保证传输的正确性.
			BASE64Encoder enc = new BASE64Encoder();
			// 经过BASE64转码后的密文
			String base_string;
			// base_string = new String(Base64.encode(encrypt));
			// 对密文进行BASE64转码.
			base_string = enc.encode(encrypt);

			String cipherString = enc.encode(encrypt);

			BASE64Decoder dec = new BASE64Decoder();
			String ciphertext = new String(dec.decodeBuffer(base_string));

			System.out.println("BASE64 转码后的密文 length:" + base_string.length()
					+ "   " + base_string);
			System.out.println("BASE64 转码后的密文 length:" + base_string.length()
					+ "   " + cipherString);

			/** **************************解密****************************************** */

			// 将BASE64转码后的密文进行解码.解码后应该与加密后的密文一致.
			String base_decode = new String(dec.decodeBuffer(base_string));
			byte[] bb = encrypt;
			byte[] base = dec.decodeBuffer(base_string);
			for (int i = 0; i < bb.length; i++) {
				System.out.println(encrypt[i] + ":" + base[i]);
			}
			decrypt = desDecrypt(deskey, base_decode.getBytes());
			System.out.println("解密后的明文decrypt=" + new String(decrypt));
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	/*
	 * 对普通字符串进行BASE64转码 srcString :普通字符串
	 */
	public static String base64Encode(byte[] srcString)// 加base64
	{
		BASE64Encoder base64Encoder = new BASE64Encoder();
		try {
			// 经过BASE64加密后的密文
			String base64String = base64Encoder.encode(srcString);
			return base64String;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/*
	 * 将BASE64字符串解码 base64String:BASE64字符串
	 */
	public static String base64Decode(String base64String)// 解base64
	{
		BASE64Decoder base64Decoder = new BASE64Decoder();
		try {

			// 将BASE64转码过的字符串进行解码,获取明文
			String srcString = new String(base64Decoder
					.decodeBuffer(base64String));
			return srcString;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -