📄 desmgr.java
字号:
// ----------------------------------------------------------------------------
// $Source: /cvs/vas2006/webpro2/webpro_java/src/com/onewaveinc/portalman/webpro/security/DesMgr.java,v $
// ----------------------------------------------------------------------------
// Copyright (c) 2002 by Onewave Inc.
// ----------------------------------------------------------------------------
// $Id: DesMgr.java,v 1.1.1.1 2006/08/01 05:49:34 zhengx Exp $
// ----------------------------------------------------------------------------
// $Log: DesMgr.java,v $
// Revision 1.1.1.1 2006/08/01 05:49:34 zhengx
// no message
//
// Revision 1.1 2006/06/02 03:33:17 wuyan
// *** empty log message ***
//
// Revision 1.2 2005/12/09 08:38:12 lufang
// no message
//
// Revision 1.1 2005/12/08 10:37:42 like
// no message
//
// Revision 1.1 2003/07/28 06:30:32 zengc
// no message
//
// ----------------------------------------------------------------------------
package com.onewaveinc.portalman.webpro.security;
/**
* <p>Title: PortalMAN SDK API Documentation</p>
* <p>Description: OneWave Technologies., Inc. PortalMAN Value-add Management Platform 3rd Software Development Kit</p>
* <p>Copyright: Copyright (c) 2002 </p>
* <p>Company: OneWave Technologies., Inc.</p>
* @author 3rd AAA & ICP Integration Developement Team
* @version 1.5
*/
import java.util.*;
import java.io.*;
import java.security.*;
import java.math.*;
import cryptix.util.core.BI;
import cryptix.util.core.ArrayUtil;
import cryptix.util.core.Hex;
import cryptix.provider.key.*;
import xjava.security.Cipher;
import xjava.security.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class DesMgr {
// public static String _DES = "DES/ECB/PKCS#5";
// public static String _TRIPLEDES = "DES-EDE3/ECB/PKCS#5";
public DesMgr() {
}
// public static String encrypt(String str,String theRawKey,String encryptType)throws Exception{
//
// byte[] encyptByte = encrypt(str.getBytes(),theRawKey,encryptType);
// String result = Hex.toString(encyptByte);
// return result;
// }
//
// public static String decrypt(String str,String theRawKey,String encryptType){
//
// byte[] decyptByte = decrypt(Hex.fromString(str),theRawKey,encryptType);
// String result = null;
// try {
// result = new String(decyptByte,"GBK");
// }catch (UnsupportedEncodingException ex) {
// ex.printStackTrace();
// }
// return result;
// }
// private static byte[] encrypt(byte[] bytes, String serverkey,String encryptType){
//
// byte[] ciphertext = null;
// try{
// RawSecretKey key = null;
// if (serverkey.length() == 16){
// key = new RawSecretKey("DES",Hex.fromString(serverkey));
// }else if (serverkey.length() == 48){
// key = new RawSecretKey("DES-EDE3",Hex.fromString(serverkey));
// }
// Cipher des=Cipher.getInstance(encryptType,"Cryptix");
// des.initEncrypt(key);
// ciphertext = des.crypt(bytes);
// }catch (Exception e){
// System.err.println("Caught exception " + e.toString());
// e.printStackTrace();
// }
// return ciphertext;
// }
// private static byte[] decrypt(byte[] bytes, String serverkey,String encryptType){
//
// byte[] ciphertext = null;
// try{
// RawSecretKey key = null;
// if (serverkey.length() == 16){
// key = new RawSecretKey("DES",Hex.fromString(serverkey));
// }else if (serverkey.length() == 48){
// key = new RawSecretKey("DES-EDE3",Hex.fromString(serverkey));
// }
// Cipher des=Cipher.getInstance(encryptType,"Cryptix");
// des.initDecrypt(key);
// ciphertext = des.crypt(bytes);
//
// }catch (Exception e){
// System.err.println("Caught exception " + e.toString());
// }
// return ciphertext;
// }
// /**
// * description 自动生成des密钥的算法
// * @return 16进制的des密钥字符串
// * @throws Exception
// */
// public static String generateDeskey()throws Exception{
// // DES算法要求有一个可信任的随机数源
// SecureRandom sr = new SecureRandom();
// // 为我们选择的DES算法生成一个KeyGenerator对象
// KeyGenerator kg = KeyGenerator.getInstance( "DES" );
// kg.initialize( sr );
// // 生成密匙
// Key key = kg.generateKey();
// // 获取密匙数据
// byte rawKeyData[] = key.getEncoded();
// return Hex.toString(rawKeyData);
// }
private 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;
}
}
return hs.toUpperCase();
}
private static byte[] hexStr2ByteArr(String strIn)
throws Exception {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;
//两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] arrOut = new byte[iLen / 2];
for (int i = 0; i < iLen; i = i + 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
}
return arrOut;
}
public static String encrypt(String source, String key) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
String Algorithm = null;
if (key.length() == 16) {
Algorithm = "DES"; //定义 加密算法,可用 DES,DESede,Blowfish
} else if (key.length() == 48) {
Algorithm = "DESede";
}
String result = null;
try {
SecretKey deskey = new SecretKeySpec(hexStr2ByteArr(key), Algorithm);
//加密
javax.crypto.Cipher c1 = javax.crypto.Cipher.getInstance(Algorithm);
c1.init(javax.crypto.Cipher.ENCRYPT_MODE, deskey);
byte[] cipherByte = c1.doFinal(source.getBytes());
result = byte2hex(cipherByte);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return result;
}
public static String decrypt(String source, String key) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
String Algorithm = null;
if (key.length() == 16) {
Algorithm = "DES"; //定义 加密算法,可用 DES,DESede,Blowfish
} else if (key.length() == 48) {
Algorithm = "DESede";
}
String result = null;
try {
SecretKey deskey = new SecretKeySpec(hexStr2ByteArr(key), Algorithm);
//解密
javax.crypto.Cipher c1 = javax.crypto.Cipher.getInstance(Algorithm);
c1.init(javax.crypto.Cipher.DECRYPT_MODE, deskey);
byte[] cipherByte = c1.doFinal(hexStr2ByteArr(source));
result = new String(cipherByte);
} catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
} catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return result;
}
public static void main(String[] args) throws Exception {
// String key=DesMgr.generateDeskey();
// System.out.println(key);
String test0 = "今天阴天,abc";
String test1 = encrypt(test0, "1E5C56C5FCD86544");
String test2 = decrypt(test1, "1E5C56C5FCD86544");
System.out.println("test0="+test0);
System.out.println("test1="+test1);
System.out.println("test2="+test2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -