//写了几个加密解密方法
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class Des {
static SecureRandom sr = null;
static byte[] key = null;
static byte [] rawKeyData = null;
public static void main(String[] args) {
dataKey("你好!");
getDate();
}
//创建密钥
private static byte[] createKey(){
sr = new SecureRandom();
byte rawKeyData[] = null;
try {
KeyGenerator kg = KeyGenerator.getInstance( "DES" );
kg.init( sr );
SecretKey sk = kg.generateKey();
rawKeyData = sk.getEncoded();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print("密钥:");
for (int i = 0; i < rawKeyData.length; i++) {
System.out.print(rawKeyData[i]+",");
}
System.out.println();
key = rawKeyData;
return rawKeyData;
}
//加密数据
private static void dataKey(String s){
try {
DESKeySpec dks = new DESKeySpec(createKey());
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey sk = skf.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, sk, sr);
byte[] data = s.getBytes();
rawKeyData = cipher.doFinal(data);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print("加密数据:");
for (int i = 0; i < rawKeyData.length; i++) {
System.out.print(rawKeyData[i]+",");
}
System.out.println();
}
//解密数据
private static void getDate(){
try {
DESKeySpec dks = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" );
SecretKey sk = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance( "DES" );
cipher.init( Cipher.DECRYPT_MODE, sk, sr );
byte encryptedData[] = rawKeyData;
byte decryptedData[] = cipher.doFinal(encryptedData);
System.out.println("解密:"+new String(decryptedData));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
print:密钥:56,26,-128,-15,14,87,82,-56 //
加密数据:81,105,-51,-110,71,-2,-31,-59,111,-120,-80,-19,-36,97,84,-71 //
解密:你好!
//其实加密解密代码上看来区别不大,重点就是初始化时传入的这两个常量:
cipher.init(Cipher.ENCRYPT_MODE, sk, sr); //加密
cipher.init(Cipher.DECRYPT_MODE, sk, sr); //解密