在JAVA的JCE(Java Cryptography Extention)中已经提供了DES算法和其它的一些加密算法,直接使用就可以了。在http://java.sun.com/products/jce/index-12.html可以下载到JCE1.2版,在http://java.sun.com/security/JCE1.2/spec/apidoc/index.html有它的描述文档。 good luck!

解决方案 »

  1.   

    package com.yipsilon.utils.encrypt;import java.security.*;
    import javax.crypto.*;
    import javax.crypto.spec.SecretKeySpec;
    /**
     *
     * Title: DES加密算法类
     * Copyright: Copyright (c) 2002 yipsilon.com
     * @author yipsilon
     * @version 0.1
     */public class DES {
      public static int _DES = 1;
      public static int _DESede = 2;
      public static int _Blowfish = 3;  private Cipher p_Cipher;
      private SecretKey p_Key;
      private String p_Algorithm;  private void selectAlgorithm(int al){
        switch(al){
          default:
          case 1:
            this.p_Algorithm = "DES";
            break;
          case 2:
            this.p_Algorithm = "DESede";
            break;
          case 3:
            this.p_Algorithm = "Blowfish";
            break;
        }
      }  public DES(int algorithm) throws Exception{
        this.selectAlgorithm(algorithm);
        Security.addProvider(new com.sun.crypto.provider.SunJCE());
        this.p_Cipher = Cipher.getInstance(this.p_Algorithm);
      }  public byte[] getKey(){
        return this.checkKey().getEncoded();
      }  private SecretKey checkKey(){
        try{
          if(this.p_Key == null){
            KeyGenerator keygen = KeyGenerator.getInstance(this.p_Algorithm);
            this.p_Key = keygen.generateKey();
          }
        }catch(NoSuchAlgorithmException nsae){}
        return this.p_Key;
      }  public void setKey(byte[] enckey){
        this.p_Key = new SecretKeySpec(enckey,this.p_Algorithm);
      }  public byte[] encode(byte[] data) throws Exception{
        this.p_Cipher.init(Cipher.ENCRYPT_MODE,this.checkKey());
        return this.p_Cipher.doFinal(data);
      }  public byte[] decode(byte[] encdata, byte[] enckey) throws Exception{
        this.setKey(enckey);
        this.p_Cipher.init(Cipher.DECRYPT_MODE,this.p_Key);
        return this.p_Cipher.doFinal(encdata);
      }  public String byte2hex(byte[] b){
        String hs = "";
        String stmp = "";
        for(int i = 0;i < b.length;i++){
          stmp = Integer.toHexString(b[i] & 0xFF);
          if(stmp.length() == 1) hs += "0" + stmp;
          else hs += stmp;
        }
        return hs.toUpperCase();
      }  public byte[] hex2byte(String hex) throws IllegalArgumentException{
        if(hex.length() % 2 != 0)
          throw new IllegalArgumentException();
        char[] arr = hex.toCharArray();
        byte[] b = new byte[hex.length()/2];
        for(int i = 0,j = 0,l = hex.length();i < l;i++,j++){
          String swap = "" + arr[i++] + arr[i];
          int byteint = Integer.parseInt(swap,16) & 0xFF;
          b[j] = new Integer(byteint).byteValue();
        }
        return b;
      }
    /*
      public static void main(String[] args) throws Exception{
        String info = "这是要加密的文本";
        System.out.println("region string:" + info);    byte[] key; //密钥文件(byte)
        DES des = new DES(DES._DES); // 声明DES
        key = des.getKey(); //获取随机生成的密钥
        System.out.println("encrypted key(byte):" + new String(key));    String hexkey = des.byte2hex(key); //生成十六进制密钥
        System.out.println("encrypted key(hex):" + hexkey);    byte[] enc = des.encode(info.getBytes()); //生成加密文件(byte)
        System.out.println("encrypted string(byte):" + new String(enc));    String hexenc = des.byte2hex(enc); //生成十六进制加密文件
        System.out.println("encrypted string(hex):" + hexenc);    byte[] dec = des.decode(enc,des.hex2byte(hexkey)); //解密文件,其中转换十六进制密钥为byte
        System.out.println("decrypted string:" + new String(dec)); //生成解密文件字符串, 与info相同
      }
    */
    }
      

  2.   

    我这是J2SDK 1.4下编写的, 估计在VJ不好用。微软好像没有提供关于加密算法的包,为什么不用标准Java包呢?!