`
clarancepeng
  • 浏览: 191712 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用DES算法进行加密和解密

阅读更多
java 代码
  1. package com.gemt.dataswap.security;   
  2.   
  3. import java.security.Security;   
  4. import javax.crypto.Cipher;   
  5. import javax.crypto.KeyGenerator;   
  6. import javax.crypto.SecretKey;   
  7. import javax.crypto.spec.SecretKeySpec;   
  8. import com.gemt.dataswap.util.Constants;   
  9.   
  10. public class DES {    
  11.     public static int _DES = 1;    
  12.     public static int _DESede = 2;    
  13.     public static int _Blowfish = 3;    
  14.     private Cipher p_Cipher;    
  15.     private SecretKey p_Key;    
  16.     private String p_Algorithm;   
  17.        
  18.     private void selectAlgorithm(int al) {    
  19.         switch (al) {    
  20.             default:    
  21.             case 1:    
  22.                 this.p_Algorithm = "DES";    
  23.                 break;    
  24.             case 2:    
  25.                 this.p_Algorithm = "DESede";    
  26.                 break;    
  27.             case 3:    
  28.                 this.p_Algorithm = "Blowfish";    
  29.                 break;    
  30.         }    
  31.     }   
  32.        
  33.     public DES(int algorithm) throws Exception {    
  34.         this.selectAlgorithm(algorithm);    
  35.         Security.addProvider(new com.sun.crypto.provider.SunJCE());    
  36.         this.p_Cipher = Cipher.getInstance(this.p_Algorithm);    
  37.     }   
  38.        
  39.     public byte[] getKey() {    
  40.         return this.checkKey().getEncoded();    
  41.     }   
  42.        
  43.     private SecretKey checkKey() {    
  44.         try {    
  45.             if (this.p_Key == null) {    
  46.                 KeyGenerator keygen = KeyGenerator.getInstance(this.p_Algorithm);    
  47.                 /*   
  48.                 SecureRandom sr = new SecureRandom(key.getBytes());   
  49.                 keygen.init(168, sr);*/    
  50.                 this.p_Key = keygen.generateKey();    
  51.             }    
  52.         }    
  53.         catch (Exception nsae) {}    
  54.         return this.p_Key;    
  55.     }   
  56.        
  57.     public void setKey(byte[] enckey) {    
  58.         this.p_Key = new SecretKeySpec(enckey, this.p_Algorithm);    
  59.     }   
  60.        
  61.     public byte[] encode(byte[] data) throws Exception {    
  62.         this.p_Cipher.init(Cipher.ENCRYPT_MODE, this.checkKey());    
  63.         return this.p_Cipher.doFinal(data);    
  64.     }   
  65.        
  66.     public byte[] decode(byte[] encdata, byte[] enckey) throws Exception {    
  67.         this.setKey(enckey);    
  68.         this.p_Cipher.init(Cipher.DECRYPT_MODE, this.p_Key);    
  69.         return this.p_Cipher.doFinal(encdata);    
  70.     }   
  71.        
  72.     public String byte2hex(byte[] b) {    
  73.         String hs = "";    
  74.         String stmp = "";    
  75.         for (int i = 0; i < b.length; i++) {    
  76.             stmp = Integer.toHexString(b[i] & 0xFF);    
  77.             if (stmp.length() == 1) {    
  78.                 hs += "0" + stmp;    
  79.             }    
  80.             else {    
  81.                 hs += stmp;    
  82.             }    
  83.         }    
  84.         return hs.toUpperCase();    
  85.     }   
  86.        
  87.     public byte[] hex2byte(String hex) throws IllegalArgumentException {    
  88.         if (hex.length() % 2 != 0) {    
  89.             throw new IllegalArgumentException();    
  90.         }    
  91.         char[] arr = hex.toCharArray();    
  92.         byte[] b = new byte[hex.length() / 2];    
  93.         for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {    
  94.             String swap = "" + arr[i++] + arr[i];    
  95.             int byteint = Integer.parseInt(swap, 16) & 0xFF;    
  96.             b[j] = new Integer(byteint).byteValue();    
  97.         }    
  98.         return b;    
  99.     }   
  100.        
  101.     /**  
  102.      * this is DES algorithm, the string will be encode become hex  
  103.      * @param info  
  104.      * @return  
  105.      * @throws Exception  
  106.      */  
  107.     public String encode(String info, byte[] key) {   
  108.         setKey(key);   
  109.         try{   
  110.             return byte2hex(encode(info.getBytes()));   
  111.         }   
  112.         catch (Exception e)   
  113.         {   
  114.             return info;   
  115.         }   
  116.     }   
  117.        
  118.     /**  
  119.      * this is DES algorithm, the string will be decode from hex text  
  120.      * @param info  
  121.      * @return  
  122.      * @throws Exception  
  123.      */    
  124.     public String decode(String info, byte[] key) {   
  125.         try {   
  126.             return new String(decode(hex2byte(info), key));   
  127.         }   
  128.         catch (Exception e)   
  129.         {   
  130.             return info;   
  131.         }   
  132.     }   
  133.        
  134.     public String decode(String info, String hexkey) throws IllegalArgumentException, Exception {   
  135.         return new String(decode(hex2byte(info), hex2byte(hexkey)));   
  136.     }   
  137.        
  138.     public static void main(String[] args) throws Exception {   
  139.         /*  
  140.         String info = "要加密的字串";   
  141.         System.out.println("region string:" + info);   
  142.         byte[] key; //密钥文件(byte)   
  143.         DES des = new DES(DES._DESede); // 声明DES   
  144.         //key = des.getKey(); //获取随机生成的密钥  
  145.         key = "thisisgeomatthisisgeomat".getBytes();   
  146.         des.setKey(key);  
  147.         System.out.println("key's length is " + key.length);  
  148.         System.out.println("encrypted key(byte):" + new String(key));   
  149.         String hexkey = des.byte2hex(key); //生成十六进制密钥   
  150.         System.out.println("encrypted key(hex):" + hexkey);   
  151.         byte[] enc = des.encode(info.getBytes()); //生成加密文件(byte)   
  152.         System.out.println("encrypted string(byte):" + new String(enc));   
  153.         String hexenc = des.byte2hex(enc); //生成十六进制加密文件   
  154.         System.out.println("encrypted string(hex):" + hexenc);   
  155.         byte[] dec = des.decode(enc, des.hex2byte(hexkey)); //解密文件,其中转换十六进制密钥为byte   
  156.         System.out.println("decrypted string:" + new String(dec)); //生成解密文件字符串, 与info相同  
  157.         */  
  158.         DES des = new DES(DES._DESede);   
  159.         String info = "大家好,this is a encode & decode test 9875603421???";   
  160.         String passinfo = des.encode(info, Constants.PASSWORD_KEY);   
  161.         System.out.println("passinfo is :: " + passinfo);   
  162.            
  163.         String oldStr = des.decode(passinfo, Constants.PASSWORD_KEY);   
  164.         System.out.println("old string is :: " + oldStr);   
  165.     }    
  166. }  
分享到:
评论
1 楼 forcer521 2011-03-14  
com.gemt.dataswap.util.Constants

这个文件呢??

相关推荐

    DES算法 加密算法解密算法

    DES 算法加密算法解密算法 DES 算法概述 DES(Data Encryption Standard)是一种对称密钥块加密算法,由美国 IBM 公司的 W. Tuchman 和 C. Meyer 于 1971-1972 年研制成功。1973 年,美国国家标准局(NBS)公开...

    C语言实现DES加密解密算法

    3. 加密和解密操作是 DES 加密解密算法的核心,使用子密钥和加密解密算法来实现。 4. 基本操作是 DES 加密解密算法的基础,包括循环左移、IP 置换、扩展置换、选择函数 S 和异或操作。 DES 加密解密算法的 C 语言...

    密码学DES算法的实现 含有加密和解密

    DES算法是美国国家标准局(NBS)于1977年颁布的数据加密标准(FIPS),它使用56位的密钥对64位的明文进行加密和解密。 DES算法的加密过程可以分为以下几个步骤: 1.初始置换(IP):将64位的明文进行换位处理,...

    VB实现DES加密解密算法,vb加密和解密,VBA

    - 创建DESCryptoServiceProvider对象,这是VB中实现DES算法的入口。 - 设置密钥和初始化向量(IV)。DES算法需要一个64位的密钥,但只有56位真正参与加密,剩下的8位用于奇偶校验。同时,IV用于初始块加密状态,...

    C++ 代码实现DES加密解密源代码类

    2. 加密函数:接受明文数据,使用DES算法加密,返回密文。 3. 解密函数:接受密文数据,使用相同的密钥进行解密,返回明文。 4. 密钥设置函数:处理密钥,确保其满足DES的要求。 5. 错误处理机制:捕获和处理可能...

    Qt DES_ECB加密解密类

    首先,DES_ECB加密解密类的核心在于实现DES算法的加密和解密过程。DES算法基于64位的数据块进行操作,通过一系列的置换、异或和迭代函数来变换明文,形成密文。ECB模式下,每个64位的数据块都是独立加密的,这意味着...

    文件和文件夹的加密和解密工具(Des算法)

    当您使用DES算法加密文件或文件夹时,您需要先生成一个密钥,这个密钥只有拥有者知道。加密过程会将明文数据(未加密的数据)转换为无法读取的密文,只有使用正确的密钥才能解密回原始内容。在Windows、Linux或Mac等...

    DES算法加密解密文件

    DES算法加密解密1M文件,并计算加密和解密时间

    DES对称加密算法进行加密和解密

    DES对称加密算法进行加密和解密的步骤: 输入8位密钥和数据。 将输入的数据分别转换为16位十六进制和字符输出。 使用输入的密钥对数据进行加密。加密过程中会进行一系列的置换、替代和移位操作。 将加密后的结果...

    基于C语言的DES算法加密与解密

    4. **逆过程**:解密过程与加密类似,只是在某些步骤上进行逆操作,如轮函数中的异或操作是在不同的数据上进行,且子密钥的使用顺序相反。 在"密码学课程设计报告.docx"中,可能包含了关于DES算法的理论介绍、C语言...

    C语言实现DES算法DES加密算法实验报告.doc

    C语言实现DES算法DES加密算法实验报告.doc

    1C#使用DES算法加密字符串为定长字符串的方法及代码实现[整理].pdf

    ### C#中使用DES算法加密字符串为定长字符串的方法及代码实现 #### 知识点概述 本文档主要介绍了在C#编程语言中使用DES算法进行字符串加密的具体方法,并提供了完整的代码实现示例。文档中所提到的代码通过.NET...

    js网页界面实现DES算法支持中文加密解密

    ### JS网页界面实现DES算法支持中文加密解密 #### 知识点概述 本文将详细介绍一个基于JavaScript(JS)的网页界面实现数据加密标准(Data Encryption Standard, DES)算法的过程,该实现支持中文文本的加密与解密...

    DES算法加密解密

    使用DES算法加密、解密文本、文件,十六进制显示。 提供源代码。 缺点:没有处理文件末尾。

    des算法加密解密文件

    DES算法使用56位的密钥,通过一系列复杂的置换和混淆操作对64位的数据块进行加密。尽管DES现在被认为安全性较低,因为它相对较短的密钥长度容易受到现代计算能力的攻击,但在学习加密原理和历史时仍然具有很高的价值...

    使用DES算法实现加密解密含详细注释(C++)

    使用C++实现DES算法进行加密解密,内含详细注释和加密解密的示例运行。

    DES加密解密算法 C语言源代码

    这篇C语言源代码实现了DES加密解密算法,特别适合于资源有限的环境,如STM32或51单片机。STM32系列是基于ARM Cortex-M内核的微控制器,而51单片机则是早期广泛应用的8位微处理器。在这些平台上,由于内存(RAM)资源...

    DES文件加密解密算法实现

    1. 初始化:首先需要一个随机的初始化向量(IV),这个向量与第一个明文块进行异或,然后用DES算法加密。 2. 加密过程: - 对于每个明文块M_i,将其与上一个密文块C_{i-1}进行异或操作,得到XOR的结果X_i。 - 将X...

    用 MFC 实现 DES 加密解密算法

    本文将深入探讨如何使用MFC(Microsoft Foundation Classes)库实现DES(Data Encryption Standard)加密解密算法,以及如何支持文件的打开和保存操作。 DES是一种对称加密算法,由IBM在1970年代开发,并在1977年被...

Global site tag (gtag.js) - Google Analytics