欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中使用DES加密解密实例

程序员文章站 2024-02-20 23:58:40
在前面介绍了一些加密解密类的使用,这里综合起来做一个简单的测试,代码如下: mainactivity: 复制代码 代码如下:package com.home.testd...

在前面介绍了一些加密解密类的使用,这里综合起来做一个简单的测试,代码如下:

mainactivity:

复制代码 代码如下:

package com.home.testdes;

import android.os.bundle;
import android.util.log;
import android.app.activity;

public class mainactivity extends activity {

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  desutil u = new desutil();
  string mi = u.getenc("i love you");
  log.i("加密后", mi);
  string ming = u.getdec(mi);
  log.i("解密后", ming);
 }
}

加密解密工具类:

复制代码 代码如下:

package com.home.testdes;

import java.security.key;
import java.security.spec.algorithmparameterspec;

import javax.crypto.cipher;
import javax.crypto.secretkeyfactory;
import javax.crypto.spec.deskeyspec;
import javax.crypto.spec.ivparameterspec;

import android.util.base64;

/**
 * 使用des加密和解密工具类
 *
 * @author administrator
 *
 */
public class desutil {

 private key key;// 密钥的key值
 private byte[] deskey;
 private byte[] desiv = { 0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xab,
   (byte) 0xcd, (byte) 0xef };
 private algorithmparameterspec iv = null;// 加密算法的参数接口

 public desutil() {
  try {
   this.deskey = "abcdefghijk".getbytes("utf-8");// 设置密钥
   deskeyspec keyspec = new deskeyspec(deskey);// 设置密钥参数
   iv = new ivparameterspec(desiv);// 设置向量
   secretkeyfactory keyfactory = secretkeyfactory.getinstance("des");// 获得密钥工厂
   key = keyfactory.generatesecret(keyspec);// 得到密钥对象
  } catch (exception e) {
   e.printstacktrace();
  }
 }

 /**
  * 加密string 明文输入密文输出
  *
  * @param inputstring
  *            待加密的明文
  * @return 加密后的字符串
  */
 public string getenc(string inputstring) {
  byte[] bytemi = null;
  byte[] byteming = null;
  string outputstring = "";
  try {
   byteming = inputstring.getbytes("utf-8");
   bytemi = this.getenccode(byteming);
   byte[] temp = base64.encode(bytemi, base64.default);
   outputstring = new string(temp);
  } catch (exception e) {
  } finally {
   byteming = null;
   bytemi = null;
  }
  return outputstring;
 }

 /**
  * 解密string 以密文输入明文输出
  *
  * @param inputstring
  *            需要解密的字符串
  * @return 解密后的字符串
  */
 public string getdec(string inputstring) {
  byte[] byteming = null;
  byte[] bytemi = null;
  string strming = "";
  try {
   bytemi = base64.decode(inputstring.getbytes(), base64.default);
   byteming = this.getdescode(bytemi);
   strming = new string(byteming, "utf8");
  } catch (exception e) {
  } finally {
   byteming = null;
   bytemi = null;
  }
  return strming;
 }

 /**
  * 加密以byte[]明文输入,byte[]密文输出
  *
  * @param bt
  *            待加密的字节码
  * @return 加密后的字节码
  */
 private byte[] getenccode(byte[] bt) {
  byte[] bytefina = null;
  cipher cipher;
  try {
   // 得到cipher实例
   cipher = cipher.getinstance("des/cbc/pkcs5padding");
   cipher.init(cipher.encrypt_mode, key, iv);
   bytefina = cipher.dofinal(bt);
  } catch (exception e) {
   e.printstacktrace();
  } finally {
   cipher = null;
  }
  return bytefina;
 }

 /**
  * 解密以byte[]密文输入,以byte[]明文输出
  *
  * @param bt
  *            待解密的字节码
  * @return 解密后的字节码
  */
 private byte[] getdescode(byte[] bt) {
  cipher cipher;
  byte[] bytefina = null;
  try {
   // 得到cipher实例
   cipher = cipher.getinstance("des/cbc/pkcs5padding");
   cipher.init(cipher.decrypt_mode, key, iv);
   bytefina = cipher.dofinal(bt);
  } catch (exception e) {
   e.printstacktrace();
  } finally {
   cipher = null;
  }
  return bytefina;
 }
}