`
阿杜杜不是阿木木
  • 浏览: 20326 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

DES加密、解密文件与字符串工具类

 
阅读更多

更新日期20150902

package com.jh.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
@SuppressWarnings("restriction")
public class DESUtil {
 
    private Key key ;
 
    public DESUtil() {
 
    }
 
    public DESUtil(String str) {
       setKey(str); // 生成密匙
    }
 
    public Key getKey() {
       return key ;
    }
 
    public void setKey(Key key) {
       this . key = key;
    }
 
    /**
      * 根据参数生成 KEY
      */
    public void setKey(String strKey) {
       try {
           KeyGenerator _generator = KeyGenerator.getInstance ("DES");
           _generator.init( new SecureRandom(strKey.getBytes()));
           this . key = _generator.generateKey();
           _generator = null ;
       } catch (Exception e) {
           throw new RuntimeException(
                  "Error initializing SqlMap class. Cause: " + e);
       }
    }
 
    /**
      * 加密 String 明文输入 ,String 密文输出
      */
    public String encryptStr(String strMing) {
       byte [] byteMi = null ;
       byte [] byteMing = null ;
       String strMi = "" ;
       BASE64Encoder base64en = new BASE64Encoder();
       try {
           byteMing = strMing.getBytes( "UTF8" );
           byteMi = this .encryptByte(byteMing);
           strMi = base64en.encode(byteMi);
       } catch (Exception e) {
           throw new RuntimeException(
                  "Error initializing SqlMap class. Cause: " + e);
       } finally {
           base64en = null ;
           byteMing = null ;
           byteMi = null ;
       }
       return strMi;
    }
 
    /**
      * 解密 以 String 密文输入 ,String 明文输出
      *
      * @param strMi
      * @return
      */
    public String decryptStr(String strMi) {
       BASE64Decoder base64De = new BASE64Decoder();
       byte [] byteMing = null ;
       byte [] byteMi = null ;
       String strMing = "" ;
       try {
           byteMi = base64De.decodeBuffer(strMi);
           byteMing = this .decryptByte(byteMi);
           strMing = new String(byteMing, "UTF8" );
       } catch (Exception e) {
           throw new RuntimeException(
                  "Error initializing SqlMap class. Cause: " + e);
       } finally {
           base64De = null ;
           byteMing = null ;
           byteMi = null ;
       }
       return strMing;
    }
 
    /**
      * 加密以 byte[] 明文输入 ,byte[] 密文输出
      *
      * @param byteS
      * @return
      */
    private byte [] encryptByte( byte [] byteS) {
       byte [] byteFina = null ;
       Cipher cipher;
       try {
           cipher = Cipher.getInstance ( "DES" );
           cipher.init(Cipher. ENCRYPT_MODE , key );
           byteFina = cipher.doFinal(byteS);
       } catch (Exception e) {
           throw new RuntimeException(
                  "Error initializing SqlMap class. Cause: " + e);
       } finally {
           cipher = null ;
       }
       return byteFina;
    }
 
    /**
      * 解密以 byte[] 密文输入 , 以 byte[] 明文输出
      *
      * @param byteD
      * @return
      */
    private byte [] decryptByte( byte [] byteD) {
       Cipher cipher;
       byte [] byteFina = null ;
       try {
           cipher = Cipher.getInstance ( "DES" );
           cipher.init(Cipher. DECRYPT_MODE , key );
           byteFina = cipher.doFinal(byteD);
       } catch (Exception e) {
           throw new RuntimeException(
                  "Error initializing SqlMap class. Cause: " + e);
       } finally {
           cipher = null ;
       }
       return byteFina;
    }
 
    /**
      * 文件 file 进行加密并保存目标文件 destFile 中
      *
      * @param file
      *             要加密的文件 如 c:/test/srcFile.txt
      * @param destFile
      *             加密后存放的文件名 如 c:/ 加密后文件 .txt
      */
    public void encryptFile(String file, String destFile) throws Exception {
       Cipher cipher = Cipher.getInstance ( "DES" );
       // cipher.init(Cipher.ENCRYPT_MODE, getKey());
       cipher.init(Cipher. ENCRYPT_MODE , this . key );
       InputStream is = new FileInputStream(file);
       OutputStream out = new FileOutputStream(destFile);
       CipherInputStream cis = new CipherInputStream(is, cipher);
       byte [] buffer = new byte [1024];
       int r;
       while ((r = cis.read(buffer)) > 0) {
           out.write(buffer, 0, r);
       }
       cis.close();
       is.close();
       out.close();
    }
 
    /**
      * 文件采用 DES 算法解密文件
      *
      * @param file
      *             已加密的文件 如 c:/ 加密后文件 .txt *
      * @param destFile
      *             解密后存放的文件名 如 c:/ test/ 解密后文件 .txt
      */
    public void decryptFile(String file, String dest) throws Exception {
       Cipher cipher = Cipher.getInstance ( "DES" );
       cipher.init(Cipher. DECRYPT_MODE , this . key );
       InputStream is = new FileInputStream(file);
       OutputStream out = new FileOutputStream(dest);
       CipherOutputStream cos = new CipherOutputStream(out, cipher);
       byte [] buffer = new byte [1024];
       int r;
       while ((r = is.read(buffer)) >= 0) {
           cos.write(buffer, 0, r);
       }
       cos.close();
       out.close();
       is.close();
    }
 
    public static void main(String[] args) throws Exception {
       DESUtil des = new DESUtil( "hrhx!@#2015" );
       // DES 加密文件
//       des.encryptFile("c:/test.docx", "c:/ 加密 test.docx");
       // DES 解密文件
//       des.decryptFile("c:/ 加密 test.docx", "c:/ 解密 test.docx");
       String str1 = "{\"companyId\":\"6\",\"applydata\":\"1\"}" ;
       // DES 加密字符串
       String str2 = des.encryptStr(str1);
       // DES 解密字符串
       String deStr = des.decryptStr(str2);
       System. out .println( " 加密前: " + str1);
       System. out .println( " 加密后: " + str2);
       System. out .println( " 解密后: " + deStr);
    }
} 


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    C++ DES加密解密

    C++ DES加密解密 封装成类了 此代码是测试工具,实现字符串加密解密/文件加密解密。KEY可使用2个 支持中文。 VS2010运行代码

    Base64工具类(加密、解密 )以及MD5加密

    加解密工具集 对字符串做BASE64加密 解密 MD5加密 解密 DES加密 DES解密 AES加密 AES解密

    C# 辅助工具类,winform、.Core、.Net工具栏(字符处理,序列化,日志,加解密,文件,验证码,换算,具体如下等等)

    日期处理// 时间处理// 时间戳// Unix 时间换算// 时间 - 周 换算// AES 加密解密// DES 加密解密// MD5 原生算法// MD5 算法(依赖系统)// 标志枚举运算// Guid 格式处理// 模型序列化// 字符串处理(StringTool)...

    Java常用工具类大全,工作5年精心整理(最新版)

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    自己收集整理的一些常用的工具类

    DES DES加密解密类 DataCleanManager 本应用数据清除管理器 DatabaseExportUtils 应用数据库导出工具类 DateUtil 日期操作工具类 DbHelper 数据库帮助类 DensityUtil 屏幕信息获取数值的转换 DeviceStatusUtils 手机...

    java各种工具类,多年精华

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    Java常用工具类大全

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    Java常用工具类大全.7z

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    java基础类库开发包,工作5年精心整理_Java常用工具类源码

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    懒惰:Android工具自己整理的常用的工具类

    DES加密解密类 本应用数据清除管理器 应用数据库衍生工具类 日期操作工具类 数据库帮助类 屏幕信息获取数值的转换 手机状态工具类主要包括网络,蓝牙,屏幕亮度,飞行模式,音量等 DigestUtils 文件操作 拼音汉字...

    CryptionDataUtil.java

    Java 使用3Des加密数据,工具类,包含使用数组密钥加密数组,解密数组,使用字符串密钥加密字符串,解密字符串。如果对你有帮助,那就给个好评吧!!!

    java常用工具大全

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    Helper Master

    Public class IpHelper 共用工具类 Public class JavaScriptHelper JavaScript客户端脚本输出帮助类 Public class JsonHelper JSON转换帮助类 Public class MailHelper 邮件操作类 Public class MailSmtpHelper ...

    commonutils:Java实用程序

    通用工具 java常用帮助类 很多逻辑写过,为了减少重复性工作,将平时经常用到的一些方法封装成工具类 基本包下: ArrayUtils分布式操作工具类 MapSortUtils map排序工具类 ...DESUtils DES加解密工具类 EncryptAnd

    DESUtils.java

    DESUtils.java,Java应用DES,整理DES方式加密/解密工具类,DES对称加密算法,字节数组转换16进制字符串,16进制字符串转换字节数组方法等等。

    Android开发人员不得不收集的代码

    将字符串写入文件 writeFileFromString 简单获取文件编码格式 getFileCharsetSimple 获取文件行数 getFileLines 指定编码按行读取文件到List readFile2List 指定编码按行读取文件到StringBuilder中 readFile2SB byte...

    NP管理器 v3.0.79 免费APK逆向修改工具

    ·工具箱(常见字符串转换,如base64、des、md5、16进制、Unicode、去空白等); · 一键添加Xposed检测,一键添加弹窗、对话框; · axml反编译/回编译、arsc文件查看字符常量; · 一键LOG注入,一键去除所有弹窗...

    javautils:Java实用程序

    常用工具类,包括常量定义,正则表达式工具类,字符串工具类,IO流关闭,java对象拷贝 2 com.wind.media tess4j工具类,ocr文字识别,以及opencv得身份证人脸提取, 音频,二维码 3 com.wind.encrypt 加密解密工具类...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

Global site tag (gtag.js) - Google Analytics