当前位置:编程学习 > 网站相关 >>

试问用DES加密解密是否安全

   数据加密现在有很多方式,现在在思考系统中是采用不可逆加密还是采用可逆加密?是采用MD5加密还是采用DES加密?
 
下面给出一个例子:采用md5加密:
 
  加密字符串是:admin
 
  密文是:21232F297A57A5A743894A0E4A801FC3
 
但是复制密文在百度中随便搜索MD5解密,然后输入进行就显示解密后内容为:admin
 
采用DES加密:
 
因为DES解密是可以根据传入的Key值,然后产生一个密文
 
比如参考代码:
 

/**
 * DescKey.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-05-21 10:32:16
 */ 
package com.wpn.web.util; 
 
import java.security.Key; 
import java.security.SecureRandom; 
 
import javax.crypto.Cipher; 
import javax.crypto.KeyGenerator; 
 
import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 
 
 
/**
 * DES 加密
 * @author cuiran
 * @version TODO
 */ 
public class DescKey { 
 
    Key key; 
 
    public DescKey(String str) { 
        setKey(str);// 生成密匙 
    } 
 
    public DescKey() { 
        setKey("bjwpn"); 
    } 
 
    /**
     * 根据参数生成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 getEncString(String strMing) { 
        byte[] byteMi = null; 
        byte[] byteMing = null; 
        String strMi = ""; 
        BASE64Encoder base64en = new BASE64Encoder(); 
        try { 
            byteMing = strMing.getBytes("UTF8"); 
            byteMi = this.getEncCode(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; 
    } 
 
    /**
     * www.zzzyk.com 解密 以String密文输入,String明文输出
     * 
     * @param strMi
     * @return
     */ 
    public  String   getDesString(String strMi) { 
        BASE64Decoder base64De = new BASE64Decoder(); 
        byte[] byteMing = null; 
        byte[] byteMi = null; 
        String strMing = ""; 
        try { 
            byteMi = base64De.decodeBuffer(strMi); 
            byteMing = this.getDesCode(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[] getEncCode(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
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,