import
java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class DesEncode {
private static String Algorithm = " DES " ; // 定义 加密算法,可用 DES,DESede,Blowfish
private static boolean debug = false ;
static {
Security.addProvider( new com.sun.crypto.provider.SunJCE());
}
// 生成密钥
public static byte [] getKey() throws Exception{
byte [] key = { - 50 , - 46 , - 78 , - 69 , - 42 , - 86 , - 75 , - 64 };
if (debug) {
System.out.println( " 生成密钥: " + byte2hex(key));
}
return key;
}
// 加密
public static String encode(String input) throws Exception{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
if (debug){
System.out.println( " 加密前的字符串: " + input);
System.out.println( " 加密前的二进串: " + byte2hex(input.getBytes()));
}
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE,deskey);
byte [] cipherByte = c1.doFinal(input.getBytes());
if (debug)
System.out.println( " 加密后的二进串: " + byte2hex(cipherByte));
return byte2hex(cipherByte);
}
// 解密
public static String decode(String input) throws Exception{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
if (debug) {
System.out.println( " 解密前的信息: " + input);
}
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE,deskey);
byte [] clearByte = c1.doFinal(hex2byte(input));
if (debug){
System.out.println( " 解密后的二进串: " + byte2hex(clearByte));
System.out.println( " 解密后的字符串: " + ( new String(clearByte)));
}
return new String(clearByte);
}
// md5()信息摘要, 不可逆
public static String md5(String input) throws Exception{
java.security.MessageDigest alg = java.security.MessageDigest.getInstance( " MD5 " ); // or "SHA-1"
if (debug){
System.out.println( " 摘要前的二进串: " + byte2hex(input.getBytes()));
System.out.println( " 摘要前的字符串: " + input);
}
alg.update(input.getBytes());
byte [] digest = alg.digest();
if (debug)
System.out.println( " 摘要后的二进串: " + byte2hex(digest));
return byte2hex(digest);
}
// 字节码转换成16进制字符串
public static String byte2hex( byte [] b) {
String hs = "" ;
String stmp = "" ;
for ( int n = 0 ;n < b.length;n ++ ){
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF ));
if (stmp.length() == 1 )
hs = hs + " 0 " + stmp;
else hs = hs + stmp;
// if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
// 16进制字符串转换成字节码
public static byte [] hex2byte(String h) {
byte [] ret = new byte [h.length() / 2 ];
for ( int i = 0 ; i < ret.length; i ++ ){
ret[i] = Integer.decode( " # " + h.substring( 2 * i, 2 * i + 2 )).byteValue();
}
return ret;
}
public static void main(String[] args) throws Exception{
debug = true ;
decode(encode( " 测试加密 " ));
md5( " haohao学习啊 " );
}
}
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class DesEncode {
private static String Algorithm = " DES " ; // 定义 加密算法,可用 DES,DESede,Blowfish
private static boolean debug = false ;
static {
Security.addProvider( new com.sun.crypto.provider.SunJCE());
}
// 生成密钥
public static byte [] getKey() throws Exception{
byte [] key = { - 50 , - 46 , - 78 , - 69 , - 42 , - 86 , - 75 , - 64 };
if (debug) {
System.out.println( " 生成密钥: " + byte2hex(key));
}
return key;
}
// 加密
public static String encode(String input) throws Exception{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
if (debug){
System.out.println( " 加密前的字符串: " + input);
System.out.println( " 加密前的二进串: " + byte2hex(input.getBytes()));
}
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE,deskey);
byte [] cipherByte = c1.doFinal(input.getBytes());
if (debug)
System.out.println( " 加密后的二进串: " + byte2hex(cipherByte));
return byte2hex(cipherByte);
}
// 解密
public static String decode(String input) throws Exception{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
if (debug) {
System.out.println( " 解密前的信息: " + input);
}
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE,deskey);
byte [] clearByte = c1.doFinal(hex2byte(input));
if (debug){
System.out.println( " 解密后的二进串: " + byte2hex(clearByte));
System.out.println( " 解密后的字符串: " + ( new String(clearByte)));
}
return new String(clearByte);
}
// md5()信息摘要, 不可逆
public static String md5(String input) throws Exception{
java.security.MessageDigest alg = java.security.MessageDigest.getInstance( " MD5 " ); // or "SHA-1"
if (debug){
System.out.println( " 摘要前的二进串: " + byte2hex(input.getBytes()));
System.out.println( " 摘要前的字符串: " + input);
}
alg.update(input.getBytes());
byte [] digest = alg.digest();
if (debug)
System.out.println( " 摘要后的二进串: " + byte2hex(digest));
return byte2hex(digest);
}
// 字节码转换成16进制字符串
public static String byte2hex( byte [] b) {
String hs = "" ;
String stmp = "" ;
for ( int n = 0 ;n < b.length;n ++ ){
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF ));
if (stmp.length() == 1 )
hs = hs + " 0 " + stmp;
else hs = hs + stmp;
// if (n<b.length-1) hs=hs+":";
}
return hs.toUpperCase();
}
// 16进制字符串转换成字节码
public static byte [] hex2byte(String h) {
byte [] ret = new byte [h.length() / 2 ];
for ( int i = 0 ; i < ret.length; i ++ ){
ret[i] = Integer.decode( " # " + h.substring( 2 * i, 2 * i + 2 )).byteValue();
}
return ret;
}
public static void main(String[] args) throws Exception{
debug = true ;
decode(encode( " 测试加密 " ));
md5( " haohao学习啊 " );
}
}