package
test;
import
java.security.InvalidKeyException;
import
java.security.Key;
import
java.security.NoSuchAlgorithmException;
import
javax.crypto.Cipher;
import
javax.crypto.KeyGenerator;
import
javax.crypto.SecretKey;
import
javax.crypto.SecretKeyFactory;
//import javax.crypto.SecretKeyFactory;
import
javax.crypto.spec.DESKeySpec;
public
class
DESCoder {
//加密算法
public
static
final
String
KEY_ALGORITHM
=
"DES"
;
//加密/解密算法 /工作模式/填充模式
public
static
final
String
CIPHER_ALGORITHM
=
"DES/ECB/PKCS5Padding"
;
//还原密钥
private
static
Key toKey(
byte
[] key)
throws
InvalidKeyException, NoSuchAlgorithmException, Exception{
//实例化DES密钥材料
DESKeySpec dks=
new
DESKeySpec(key);
//实例化密钥工厂
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(
KEY_ALGORITHM
);
//生成密钥
SecretKey secretKey= keyFactory.generateSecret(dks);
return
secretKey;
}
//解密
public
static
byte
[] decrpt(
byte
[] data,
byte
[] key)
throws
InvalidKeyException, NoSuchAlgorithmException, Exception{
//还原密钥
Key k= toKey(key);
//实例化
Cipher cipher=Cipher. getInstance(
CIPHER_ALGORITHM
);
//初始化
cipher.init(Cipher.
DECRYPT_MODE
,k);
return
cipher.doFinal(data);
}
//加密
public
static
byte
[] encrypt(
byte
[] data,
byte
[] key)
throws
Exception{
//还原密钥
Key k= toKey(key);
Cipher cipher=Cipher. getInstance(
CIPHER_ALGORITHM
);
cipher.init(Cipher.
ENCRYPT_MODE
, k);
return
cipher.doFinal(data);
}
//获取密钥,二进制形式
public
static
byte
[] initKey()
throws
Exception{
KeyGenerator kg=KeyGenerator. getInstance(
KEY_ALGORITHM
);
//初始化密钥生成器
kg.init(56);
//kg.init(64),kg.init(new SecureRandom());
//生成密钥
SecretKey secretKey=kg.generateKey();
//获取密钥的二进制形式
return
secretKey.getEncoded();
}
}
多重DES
加密算法 KEY_ALGORITHM
=
"DESede"
CIPHER_ALGORITHM
=
"DESede/ECB/PKCS5Padding
密钥规范
DEedeSKeySpec dks=
new
DESedeKeySpec(key)
密钥长度也要修改 kg.init(168);