longjianlandray 2010-01-12 15:00
浏览 559
已采纳

如何用IBM的jdk 写DES 加密程序啊?????

import java.security.Key;
import java.security.SecureRandom;
import java.util.Scanner;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

//使用DES加密与解密,可对byte[],String类型进行加密与解密
//密文可使用String,byte[]存储.
//方法:
//void getKey(String strKey)从strKey的字条生成一个Key
//String getEncString(String strMing)对strMing进行加密,返回String密文
//String getDesString(String strMi)对strMin进行解密,返回String明文
//byte[] getEncCode(byte[] byteS)byte[]型的加密
//byte[] getDesCode(byte[] byteD)byte[]型的解密

public class DES{

  public static Key key;
//根据参数生成KEY
public static void getKey(String strKey){
    try{
        KeyGenerator _generator = KeyGenerator.getInstance("DES");
        _generator.init(new SecureRandom(strKey.getBytes()));
        key = _generator.generateKey();
        _generator=null;
    }catch(Exception e){
        e.printStackTrace();
    }
}

//考试大提示加密String明文输入,String密文输出
public static String getEncString(String strMing){
    byte[] byteMi = null;
    byte[] byteMing = null;
    String strMi ="";
    BASE64Encoder base64en = new BASE64Encoder();
    try{
        byteMing = strMing.getBytes("UTF-8");
        byteMi = getEncCode(byteMing);
        strMi = base64en.encode(byteMi);
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        base64en = null;
        byteMing = null;
        byteMi = null;
    }
    return strMi;
}

//解密 以String密文输入,String明文输出
public static String getDesString(String strMi) throws Exception{
    BASE64Decoder base64De = new BASE64Decoder();
    byte[] byteMing = null;
    byte[] byteMi = null;
    String strMing = "";
    try{
        byteMi = base64De.decodeBuffer(strMi);
        byteMing = getDesCode(byteMi);
        strMing = new String(byteMing,"UTF-8");
    }catch(Exception e){
        throw e;
    }finally{
        base64De = null;
        byteMing = null;
        byteMi = null;
    }
    return strMing;
}

//加密以byte[]明文输入,byte[]密文输出
private static 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){
        e.printStackTrace();
    }finally{
        cipher = null;
    }
    return byteFina;
}

//考试大解密以byte[]密文输入,以byte[]明文输出
//@param byteD
//@return

private static byte[] getDesCode(byte[] byteD) throws Exception{
    Cipher cipher;
    byte[] byteFina=null;
    try{
        cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE,key);
        byteFina = cipher.doFinal(byteD);
    }catch(Exception e){
        throw e;
    }finally{
        cipher=null;
    }
    return byteFina;
}

//加密字符串,返回String的密文
public static String getCryptograph(String str){
     getKey("MYKEY11ERDCDVEIOKPUE");//生成密匙
     String strEnc = getEncString(str);
     return strEnc;
}

//把String 类型的密文解密
public static String getDisplay(String cryptograph) throws Exception{
     String strEnc=null;
    try {
        getKey("MYKEY11ERDCDVEIOKPUE");
        strEnc = getDesString(cryptograph);
    } catch (Exception e) {
        throw e;
    }
    return strEnc;
}

public static void main(String[] args){
    try {
        while(true){
            Scanner san=new Scanner(System.in);
            String str=san.nextLine();
             getKey("MYKEY11ERDCDVEIOKPUE");//生成密匙
            String strEnc = getEncString(str);
            System.out.println(strEnc);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

一用IBM 的jdk 就报错 如何解决

[b]问题补充:[/b]
说了半天 具体怎么解决啊????大哥

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2010-01-12 16:48
    关注

    好像换成
    import com.ibm.misc.BASE64Decoder;
    import com.ibm.misc.BASE64Encoder;

    参考下这文章
    http://www.iteye.com/topic/540018

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • wanghaolovezlq 2010-01-12 15:11
    关注

    你也不看看你用的还是sun的类嘛
    [color=red]import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder; [/color]

    找到ibm的相应的类才行

    评论
  • iteye_12540 2010-01-12 15:20
    关注

    请不要使用Sun的底层类。请使用JDK的通用类。

    评论
  • iteye_12540 2010-01-12 17:08
    关注

    使用通用的第三方Base64编码包。比如apache提供的。

    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 windows server 2022 datacenter安全策略配置 没有权限问题
  • ¥20 寻找dspace有偿技术支持
  • ¥30 深度学习的模型融合问题
  • ¥20 数电实验Verilog编程
  • ¥15 机器人MATLAB仿真示教占内存过大
  • ¥15 JSR233已经使用但是仍无法将csv数据放到一个list里显示出来,如何解决?
  • ¥15 I350 Gigabit Network
  • ¥15 关于#abap#的问题,请各位专家解答!
  • ¥20 内网通过公网访问外网问题
  • ¥20 谁有这个东西 继续教育的