DES加密+Base64转换

package httpVisit.action;

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

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

/**
 * @author:Heweipo
 * @version 1.00
 * 
 */
public class DesCoderUtil {

	private static byte[] keys = { 1, -1, 1, -1, 1, -1, 1, -1 };

	private static String key = "leagsoft";

	public static String getKey() {
		return key;
	}

	public static void setKey(String key) {
		DesCoderUtil.key = key;
	}

	/**
	 * 
	 * <p>
	 * 对password进行MD5加密
	 * @param source
	 * @return 
	 * @return byte[]    
	 * author: Heweipo
	 */
	public static byte[] getMD5(byte[] source) {
		byte tmp[] = null;
		try {
			java.security.MessageDigest md = java.security.MessageDigest
					.getInstance("MD5");
			md.update(source);
			tmp = md.digest();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return tmp;
	}

	/**
	 * 
	 * <p>
	 * 采用JDK内置类进行真正的加密操作
	 * @param byteS
	 * @param password
	 * @return 
	 * @return byte[]    
	 * author: Heweipo
	 */
	private static byte[] encryptByte(byte[] byteS, byte password[]) {
		byte[] byteFina = null;
		try {// 初始化加密/解密工具
			Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
			DESKeySpec desKeySpec = new DESKeySpec(password);
			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
			IvParameterSpec iv = new IvParameterSpec(keys);
			cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
			byteFina = cipher.doFinal(byteS);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return byteFina;
	}

	/**
	 * 
	 * <p>
	 * 采用JDK对应的内置类进行解密操作
	 * @param byteS
	 * @param password
	 * @return 
	 * @return byte[]    
	 * author: Heweipo
	 */
	private static byte[] decryptByte(byte[] byteS, byte password[]) {
		byte[] byteFina = null;
		try {// 初始化加密/解密工具
			Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
			DESKeySpec desKeySpec = new DESKeySpec(password);
			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
			IvParameterSpec iv = new IvParameterSpec(keys);
			cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
			byteFina = cipher.doFinal(byteS);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return byteFina;
	}

	/**
	 * 
	 * <p>
	 * Des加密strMing,然后base64转换
	 * @param strMing
	 * @param md5key
	 * @return 
	 * @return String    
	 * author: Heweipo
	 */
	public static String encryptStr(String strMing, byte md5key[]) {
		byte[] byteMi = null;
		byte[] byteMing = null;
		String strMi = "";
		try {
			byteMing = strMing.getBytes("utf-8");
			byteMi = encryptByte(byteMing, md5key);
			BASE64Encoder base64Encoder = new BASE64Encoder();
			strMi = base64Encoder.encode(byteMi);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			byteMing = null;
			byteMi = null;
		}
		return strMi;
	}

	/**
	 * 
	 * <p>
	 * Base64转换strMi,然后进行des解密
	 * @param strMi
	 * @param md5key
	 * @return 
	 * @return String    
	 * author: Heweipo
	 */
	public static String decryptStr(String strMi, byte md5key[]) {
		byte[] byteMing = null;
		String strMing = "";
		try {
			BASE64Decoder decoder = new BASE64Decoder();
			byteMing = decoder.decodeBuffer(strMi);
			byteMing = decryptByte(byteMing, md5key);
			strMing = new String(byteMing);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			byteMing = null;
		}
		return strMing;
	}

	public static void main(String[] args) {

		String[] keys = {"leagsoft","leagsoftpo","leagsoftiu","leagsoftyy","leagsoftew","leagsoftmm"};
		for(String key : keys){
			String data = "我是learn_more,who are you?";
			try{
				System.out.println(DesCoderUtil.encryptStr(data, DesCoderUtil.getMD5(key.getBytes("utf-8"))));
				System.out.println("--------------");
				System.out.println(DesCoderUtil.decryptStr(DesCoderUtil.encryptStr(data, DesCoderUtil.getMD5(key.getBytes("utf-8"))), 
						DesCoderUtil.getMD5(key.getBytes("utf-8"))));
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}

}
时间: 2024-11-05 17:29:22

DES加密+Base64转换的相关文章

C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应位其中一个为1另一个为0,则返回1. //对数字加密 int P_int_Num, P_int_Key;//定义两个值类型变量 string Encryptstr = (P_int_Num ^ P_int_Key).ToString();//加密数值 //对数字解密 int P_int_Key, P_int_

oracle 使用 base64 des 加密解密

平时使用到的base .des 加密方法 对于des 加解密 的秘钥 长度为8位,当输入的秘钥位数大于8位自动截取. 包头 create or replace package pkg_compare is  function f_en_base64(pi_str varchar2) return varchar2;  function f_de_base64(pi_str varchar2) return varchar2;  procedure p_decrypt_des  (    pi_s

(iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Base64 + DES加密.当然这需要移动端和后台服务器做一个统一. 1.Base64加解密 值得一提的是:apple提供了基础的Base64加解密算法.这样我们就可以直接使用方法去实现Base64加解密.先看一下apple都提供了哪些方法: @interface NSData (NSDataBase6

图片压缩base64转换 文字base64加密 上传图片会用到

// 3.图片base64转换     // 先获取压缩图片     UIImage *compressionImage = [selforiginImage:_profileImageView.imagescaleToSize:CGSizeMake(120, 120)];     // 再转换图片     NSData *data = UIImageJPEGRepresentation(compressionImage, 1.0f);     NSString *encodedImageStr

关于 Des加密(Android与ios 与后台java服务器之间的加密解密)

关于 Des加密(Android与ios  与后台java服务器之间的加密解密) http://blog.sina.com.cn/s/blog_7c8dc2d50101id91.html (2013-04-17 11:47:23)   分类: iPhone开发 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的DES加密的时候遇到了一些问题,起初怎么调都调不

关于Objective-c和Java下DES加密保持一致的方式

转载自:http://www.cnblogs.com/janken/archive/2012/04/05/2432930.html 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的DES加密的时候遇到了一些问题,起初怎么调都调不成和Android端生成的密文相同.最终一个忽然的想法让我找到了问题的所在,现在将代码总结一下,以备自己以后查阅. 首先,Java

JAVA使用DES加密解密

在使用DES加密解密的时候,遇到了一些问题,廖记一下.如有哪位大神亲临留言指点,不胜感激. 先上代码: public DESUtil() { } //密码,长度要是8的倍数 注意此处为简单密码 简单应用 要求不高时可用此密码 /*DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解.*/ private stati

C# DES加密

需要引用名称空间 using System; using System.Text; using System.Security.Cryptography; using System.IO; 具体代码: 1 public class CryptoHelper 2 { 3 /// <summary> 4 /// 使用DES加密 5 /// </summary> 6 /// <param name="plain">明文</param> 7 //

微信小程序des加密、PHP des解密

最近在做对小程序传输数据进行加密,加密方法有很多,使用的是des对称加密 采用的是CBC模式, 引用的插件为tripledes.js,https://github.com/Favour1111in/hello-world/tree/master 需要传入内容,密钥,初始化向量3个参数 var server = require('../../utils/server.js'); var CryptoJS = require('../../utils/tripledes.js'); Page({ /