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

Java实现的DES加密解密工具类实例

程序员文章站 2024-02-27 18:08:09
本文实例讲述了java实现的des加密解密工具类。分享给大家供大家参考,具体如下: 一个工具类,很常用,不做深入研究了,那来可直接用 desutil.java...

本文实例讲述了java实现的des加密解密工具类。分享给大家供大家参考,具体如下:

一个工具类,很常用,不做深入研究了,那来可直接用

desutil.java

package lsy;
import java.security.key;
import java.security.securerandom;
import javax.crypto.cipher;
import javax.crypto.keygenerator;
import javax.crypto.secretkey;
import sun.misc.base64decoder;
import sun.misc.base64encoder;
public class desutil {
 /**
  * @param args
  */
 public static void main(string[] args) {
  //以下是加密方法algorithm="aes"的测试
  system.out.println(desutil.getinstance("lushuaiyin").getencodestring("hello"));
  //输出 ldewgazkmwheyfjbz56ylw==
  //将上面的密文解密:
  system.out.println(desutil.getinstance("lushuaiyin").getdecodestring("ldewgazkmwheyfjbz56ylw=="));
  //输出 hello
  //改变密钥测试
  system.out.println(desutil.getinstance("suolong").getencodestring("hello"));
  //输出 /rlowoj+fr3kdmcdjenatg==
  system.out.println(desutil.getinstance("suolong").getdecodestring("/rlowoj+fr3kdmcdjenatg=="));
  //输出 hello
  //如果使用不正确的密钥解密,将会:
  system.out.println(desutil.getinstance("suolong").getdecodestring("ldewgazkmwheyfjbz56ylw=="));
 }
 private secretkey key=null;//密钥
 //定义 加密算法,可用 des,desede,blowfish,aes
 //不同的加密方式结果会不同
 private static string algorithm="aes";
 private static desutil desutil=null;
 public desutil(){}
 public static desutil getinstance(string strkey){
  desutil=new desutil();
  desutil.createkey(strkey);
  return desutil;
 }
 /**
  * algorithm 算法
  * @param strkey
  */
 public void createkey(string strkey){
  try{
   keygenerator kg=keygenerator.getinstance(desutil.algorithm);
   byte[] bt=strkey.getbytes("utf-8");
   securerandom sr=new securerandom(bt);
   kg.init(sr);
   this.setkey(kg.generatekey());
  }catch(exception e){
  }
 }
 /**
  * 加密方法,返回密文
  * cipher 密码
  * @param datastr
  */
 public string getencodestring(string datastr){
  byte[] miwen=null;//密文
  byte[] mingwen=null;//明文
  cipher cipher;
  string result="";//密文字符串
  try{
   mingwen=datastr.getbytes("utf-8");
   cipher=cipher.getinstance(desutil.algorithm);
   cipher.init(cipher.encrypt_mode, this.getkey());
   miwen=cipher.dofinal(mingwen);
   base64encoder base64en = new base64encoder();
   result=base64en.encodebuffer(miwen);//或者可以用下面的方法得到密文,结果是不一样的,都可以正常解密
//   result=byte2hex(miwen);//密文结果类似2c:37:b0:18:06:64:99:61:de:60:58:c1:cf:9e:b2:97
  }catch(exception e){
   e.printstacktrace();
  }
  return result;
 }
 /**
  * 解密方法,返回明文
  * @param codestr
  * @return
  */
 public string getdecodestring(string codestr){
  base64decoder base64de = new base64decoder();
  byte[] miwen=null;
  byte[] mingwen=null;
  string resultdata="";//返回的明文
  cipher cipher;
  try{
   miwen=base64de.decodebuffer(codestr);
   cipher=cipher.getinstance(desutil.algorithm);
   cipher.init(cipher.decrypt_mode, this.getkey());
   mingwen=cipher.dofinal(miwen);
   resultdata = new string(mingwen,"utf-8");
  }catch(exception e){
   return "密钥不正确或其他原因导致异常,无法解密!";
  }
  return resultdata;
 }
  //二行制转字符串
 public 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();
 }
 public secretkey getkey() {
  return key;
 }
 public void setkey(secretkey key) {
  this.key = key;
 }
 public static string getalgorithm() {
  return algorithm;
 }
 public static void setalgorithm(string algorithm) {
  algorithm = algorithm;
 }
}

运行结果:

ldewgazkmwheyfjbz56ylw==
hello
/rlowoj+fr3kdmcdjenatg==
hello
密钥不正确或其他原因导致异常,无法解密!

ps:关于加密解密感兴趣的朋友还可以参考本站在线工具:

在线des加密/解密工具:

文字在线加密解密工具(包含aes、des、rc4等):

md5在线加密工具:
http://tools.jb51.net/password/createmd5password

在线散列/哈希算法加密工具:

在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:

更多关于java相关内容感兴趣的读者可查看本站专题:《java数学运算技巧总结》、《java数据结构与算法教程》、《java字符与字符串操作技巧总结》、《java操作dom节点技巧总结》和《java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。