在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!
解决方案 »
- 敌机路线设计的问题
- 使用ArrayList出现NullPointerException...帮忙
- 请高手推荐一些关于Swing的教程或者书籍
- 懂JDOM和XML的进来看一下
- byte数组 最大个数限制
- 求解,用KeyAdapter类处理TextEvent事件的问题。
- 有没有java调用c++写的com,DLL,CORBA,的例子
- 大家帮帮忙!
- 如何给一个空的的JTable中增加ColumName和Row??--请给个实例谢谢!
- @@@@@@ 子类和超类可以放在不同的.java文件中吗?怎样实现? @@@@@
- [搜集资料]请列举P2P 和C/S 网络构架各自的优缺点,明日下午结帖
- 请教:java的发布问题
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相同
}
*/
}