`
阿杜杜不是阿木木
  • 浏览: 21505 次
  • 性别: 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加密解密工具源码”的资源,以及相关知识点。 DES(Data Encryption Standard)是一种对称加密算法,它在1970年代由IBM开发并被美国国家标准局采用为标准。DES使用56位的密钥,...

    DES加密解密工具类

    本文将详细介绍DES加密解密工具类及其使用,并解析在给定的文件列表中的`SecurityPropertyes.java`、`CryptoTools.java`和`SecurityUtil.java`这三个文件可能包含的内容。 首先,`CryptoTools.java`很可能是实现DES...

    DES加密解密(适用的Windows和Linux系统),防止Linux的下解密失败工具类

    在DESEncrypt工具类中,可能会使用`SecureRandom` 来生成用于DES加密的随机初始化向量,以增加加密的安全性。由于DES本身的安全性有限,通常建议使用更安全的算法如AES,但在某些旧系统或特定需求下,DES仍然有其...

    C++ DES加密解密

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

    DES加密解密工具C#源码

    在C#中实现DES加密解密,你需要使用.NET Framework或.NET Core提供的System.Security.Cryptography命名空间中的相关类。 以下是C#中实现DES加密解密的关键步骤: 1. **创建DES对象**:首先,你需要实例化一个...

    EncryptTools 字符串 加密 解密 工具

    "EncryptTools 字符串 加密 解密 工具"是一个专为处理字符串加密和解密任务设计的实用程序。这个工具可能包含了多种加密算法,帮助用户对敏感的文本信息进行安全处理,防止未经授权的访问或窃取。 字符串加密是一种...

    php中加密解密字符串函数类.zip

    这个压缩包中的“php中加密解密字符串函数类”很可能是这样一个自定义类,它封装了常见的加密解密算法,可能包括AES(高级加密标准)、DES(数据加密标准)或RSA(非对称加密)等。 此类库可能会包含以下几个核心...

    php字符串加密解密的类

    这个名为“php字符串加密解密的类”的工具提供了一种方法来处理敏感信息,确保它们在传输或存储时不会被未授权的用户访问。这里我们将深入探讨PHP中的字符串加密解密原理,以及base64_encode()函数在其中的作用。 ...

    C#版 DES MD5加密解密测试工具

    该工具可能包含一个名为`DES加密解密.cs`的文件,用于演示如何创建一个DES加密器,设置密钥和初始化向量,然后加密和解密数据。 其次,MD5是一种广泛使用的哈希函数,它可以将任意长度的输入转化为固定长度的128位...

    DES加密解密类

    首先,`DESCoder.java`、`Des.java`和`Coder.java`可能是实现DES加密解密功能的Java源代码文件。`DESCoder`可能是一个包含加密和解密方法的类,`Des`可能是用于执行具体加密操作的核心类,而`Coder.java`可能是一个...

    DES加密 java与.net可以相互加密解密两种方法

    本文将详细介绍如何在Java和.NET中实现互操作的DES加密解密,并提供两种不同的方法。 **方法一:使用标准库** 1. **Java实现**: - 引用`javax.crypto`包中的`Cipher`、`KeyGenerator`和`SecretKey`类。 - 创建`...

    VB字符串加密解密例子

    下面将详细探讨VB字符串加密解密的相关知识点。 首先,我们要理解加密的基本概念。加密是一种将明文(可读数据)转化为密文(不可读数据)的过程,以防止未经授权的访问或泄露。解密则是加密的逆过程,将密文恢复为...

    c++ c#同时实现DES加密解密

    在提供的文件"Encrypt.cs"中,我们可以预期看到C#中实现的DES加密解密代码,可能包含了创建DESCryptoServiceProvider对象、设置密钥和IV以及执行加密解密的过程。而文件"yxyDES2_MFC"可能是一个C++项目,使用MFC...

    C#对字符串加密解密dll源码

    2. 解密类:与加密类相对应,提供解密方法,如`DecryptString(string cipherText, string key)`,接收加密后的字符串和密钥,返回原始的明文字符串。 3. 密钥管理:这部分可能涉及到密钥的生成、存储和管理,包括...

    用 c# 做的字符串加密解密工具

    6. **示例代码**:在C#中,使用AES加密和解密字符串的简单示例代码如下: ```csharp using System; using System.Text; using System.Security.Cryptography; public static class CryptoHelper { public static ...

    3des加密字符串,C++

    1. `tripledes.cpp`:这是实现3DES加密的核心代码文件,可能包含了设置密钥、初始化环境、加密和解密字符串的函数。 2. `tool.cpp`:工具类文件,可能包含了一些辅助函数,如读写文件、转换二进制和字符串等。 3. `...

    字符串加密解密jar包

    总的来说,"字符串加密解密jar包"是一个便捷的工具,能帮助开发者快速实现字符串的加密和解密功能,为数据安全提供基础保障。用户可以根据具体需求调整加密格式,使其适应不同的应用场景,并通过提供的API文档更好地...

    des加密解密—JS实例

    本实例将探讨如何使用JavaScript实现DES加密解密功能。 首先,我们需要理解DES的基本原理。DES是一种分组密码,它将明文数据分成64位的数据块,然后用64位的密钥对每个数据块进行加密。实际的DES算法中,有56位是...

    DES加密解密

    在Java中实现DES加密解密,我们需要使用`javax.crypto`包中的类和方法。 首先,让我们了解DES的基本工作原理。DES使用56位的密钥(虽然输入是64位,但其中有8位用于奇偶校验,不参与加密过程),将64位的数据块进行...

Global site tag (gtag.js) - Google Analytics