import java.security.MessageDigest;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* 基础加密组件
*
* @author 梁栋
* @version 1.0
* @since 1.0
*/
public abstract class CoderUtil {
public static final String KEY_SHA = "SHA";
public static final String KEY_MD5 = "MD5";
/**
* MAC算法可选以下多种算法
*
* <pre>
* HmacMD5
* HmacSHA1
* HmacSHA256
* HmacSHA384
* HmacSHA512
* </pre>
*/
public static final String KEY_MAC = "HmacMD5";
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
*/
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
/**
* MD5加密
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptMD5(byte[] data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
md5.update(data);
return md5.digest();
}
/**
* SHA加密
*
* @param data
* @return
* @throws Exception
*/
public static byte[] encryptSHA(byte[] data) throws Exception {
MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
sha.update(data);
return sha.digest();
}
/**
* 初始化HMAC密钥
*
* @return
* @throws Exception
*/
public static String initMacKey() throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
SecretKey secretKey = keyGenerator.generateKey();
return encryptBASE64(secretKey.getEncoded());
}
/**
* HMAC加密
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return mac.doFinal(data);
}
public static void main(String[] args) throws Exception {
String inputStr = "简单加密";
System.err.println("原文:\n" + inputStr);
byte[] inputData = inputStr.getBytes();
String code = CoderUtil.encryptBASE64(inputData);
System.err.println("BASE64加密后:\n" + code);
byte[] output = CoderUtil.decryptBASE64(code);
String outputStr = new String(output);
System.err.println("BASE64解密后:\n" + outputStr);
}
}
对我有用[0]丢个板砖[0]引用举报管理TOP
zygege
等 级:
#623楼 得分:0回复于:2010-05-07 20:01:31Java codepackage org.wxws.common.tools;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
public class CommonComparator implements Serializable, Comparator {
/*************** 属性名及类型MAP对 *************/
private Map fnameType;
/*********** 对应的排序方式 true=顺序 false=倒序 ************/
private boolean order;
public boolean isOrder() {
return order;
}
public void setOrder(boolean order) {
this.order = order;
}
public Map getFnameType() {
return fnameType;
}
public void setFnameType(Map fnameType) {
this.fnameType = fnameType;
}
/**
* 定义排序规则 如果按照不止一个属性进行排序 这按照属性的顺序进行排序,类是sql order by 即只要比较出同位置的属性就停止
*/
public int compare(Object obj1, Object obj2) {
// 没有属性,则不排序
if(fnameType == null || fnameType.isEmpty()) {
return 2;// 不比较
}
Iterator iterator = fnameType.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String name = (String) entry.getKey();
String type = (String) entry.getValue();
if(compareField(obj1,obj2,name,type,order)) {
// 如果obj1的属性值大于obj2的属性值,则返回正数
return 1;
} else {
// 小于返回负数
return -1;
}
}
return 0;
}
/**
* 方法描述: 比较对象的属性名
*
* fei 2010-4-14
* @param o1 比较对象1
* @param o2 比较对象2
* @param fieldName 比较属性名称
* @param type 比较属性类型
* @param order 比较顺序 true=顺序 false=倒序
* @return
*/
private static boolean compareField(Object o1,Object o2,String fieldName, String type, boolean order) {
try {
Object value1 = getFieldValueByName(fieldName,o1);
Object value2 = getFieldValueByName(fieldName,o2);
if ("String".equals(type)) {
String value1Str = value1.toString();
String value2Str = value2.toString();
if (order) {//顺序
if (value1Str.compareTo(value2Str) > 0) {
return true;
}
} else {//倒序
if (value1Str.compareTo(value2Str) < 0) {
return true;
}
}
} else if ("Integer".equals(type)) {
int value1I = Integer.parseInt(value1.toString());
int value2I = Integer.parseInt(value2.toString());
if (order) {//顺序
if (value1I < value2I) {
return true;
}
} else {//倒序
if (value1I > value2I) {
return true;
}
}
} else if ("Long".equals(type)) {
long value1L = Long.parseLong(value1.toString());
long value2L = Long.parseLong(value2.toString());
if (order) {//顺序
if (value1L < value2L) {
return true;
}
} else {//倒序
if (value1L > value2L) {
return true;
}
}
} else if ("Float".equals(type)) {
float value1F = Float.parseFloat(value1.toString());
float value2F = Float.parseFloat(value2.toString());
if (order) {//顺序
if (value1F < value2F) {
return true;
}
} else {//倒序
if (value1F > value2F) {
return true;
}
}
} else if ("Double".equals(type)) {
double value1D = Double.parseDouble(value1.toString());
double value2D = Double.parseDouble(value2.toString());
if (order) {//顺序
if (value1D < value2D) {
return true;
}
} else {//倒序
if (value1D > value2D) {
return true;
}
}
} else if ("Date".equals(type)) {
Date value1D = (Date)value1;
Date value2D = (Date)value2;
if (order) {//顺序
if (value1D.before(value2D)) {
return true;
}
} else {//倒序
if (value1D.after(value2D)) {
return true;
}
}
}
} catch (Exception e) {
System.out.println("-----------------------------------------------------------------------------");
System.out.println("---------对象的该属性不存在或者不允许在此安全级别上反射该属性,详情请查阅JAVA DOC--------");
System.out.println("-----------------------------------------------------------------------------");
e.printStackTrace();
}
return false;
}
/**
* @param fieldName 属性名 obj 对象
* 反射获得该属性的值
*/
private static Object getFieldValueByName(String fieldName,Object obj) {
try {
String Letter = fieldName.substring(0,1).toUpperCase();
String methodStr = "get"+Letter+fieldName.substring(1);
Method method = obj.getClass().getMethod(methodStr, new Class[]{});
Object value = method.invoke(obj, new Object[]{});
return value;
}catch(Exception e) {
System.out.println("------------------------------------------------------");
System.out.println("---------该"+fieldName+"属性不存在----------------------");
System.out.println("------------------------------------------------------");
return null;
}
}
public static void main(String[] args) {
// List arrayDemo = new ArrayList();
//
// Person p1 = new Person();
// p1.setName("张三");
// p1.setAge(20);
// p1.setSalary(2000);
//
// Person p2 = new Person();
// p2.setName("李四");
// p2.setAge(22);
// p2.setSalary(1800);
//
// Person p3 = new Person();
// p3.setName("王五");
// p3.setAge(25);
// p3.setSalary(1900);
//
// Person p4 = new Person();
// p4.setName("赵六");
// p4.setAge(25);
// p4.setSalary(3000);
//
// Person p5 = new Person();
// p5.setName("刘七");
// p5.setAge(30);
// p5.setSalary(2000);
//
// arrayDemo.add(p1);
// arrayDemo.add(p2);
// arrayDemo.add(p3);
// arrayDemo.add(p4);
// arrayDemo.add(p5);
//
// // *********开始比较********//
// CommonComparator comparator = new CommonComparator();
//
// System.out.println("------1.按照月薪和年龄从低到高比较---------");
// Map map = new HashMap<String, String>();
// map.put("salary", "Integer");
// map.put("age", "Integer");
// comparator.setFnameType(map);
// comparator.setOrder(false);//倒顺
// Collections.sort(arrayDemo, comparator);
// for(int i=0;i<arrayDemo.size();i++) {
// Person person = (Person)arrayDemo.get(i);
// System.out.println("用户名:"+person.getName()+" 年龄:"+person.getAge()+" 月薪:"+person.getSalary());
// }
}
}
分享到:
相关推荐
Java基础加密组件--BASE64加密 使用方法: //加密 String a = EdptByBase64.encryptBASE64("/**/;pas58"); System.out.println(a); //还原 System.out.println(EdptByBase64.decryptBASE64(a)); 具体源码请参见: ...
提供了工业化强度的Java RSA数据加密组件包的设计,并提供了源代码。 -- RSACoder.java:主类,提供了数据加密、解密、签名、签名验证、密钥对生成、密钥对保存和密钥对加载等API; -- RSACoderTestCase.java:JUnit...
完全可用的Java RSA数据加密组件包,提供了源代码
java配置加密组件bouncy_castle
《java实用组件集》 源码 加密解密组件。 运行注意事项: 1、运行此环境不需导入jar文件 2、关于加密解密密码请详看注释要求
Java加密组件实现DES、RSA和SHA加密算法,很好的例子。
提供了一个完全可用的,工业化强度的Java RSA数据加密组件设计,并提供了源代码。 -- RSACoder.java:主类,提供了加密解密、数字签名、数字签名验证、密钥对生成、密钥对保存、密钥对加载等API,可方便地调用。 --...
java加密解密研究2、Bouncy Castle和Commons Codec加密组件 java加密解密研究2、Bouncy Castle和Commons Codec加密组件
Java 类文件加密专家通过分析Class文件的结构,使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。 系统特点 1.采用纯C语言开发的内核算法,运行速度极快。 2.彻底...
服务器端加密组件dll,保护劳动成果。欢迎下载!
非常棒的第三方开源组件:Bouncy Castle 加密开源组件 Java Release 1.46。推荐大家使用哈~~~
java组件设计(7)编码、加密与解密
用Java加密类实现常规的DES、RSA及SHA的加密算法,代码完整,收藏一下。
苹果操作系统的3DES加密方式,MacOS的3DES加密组件。
课程设计报告书 课程名称 面向对象程序设计 设计题目 文本文档的加密与解密 2013年 1 月 "1 设计时间 " "2013年1月14日-2013年1月18日 " "2 设计目的 " "面向对象程序设计是一门实践性很强的计算机专业基础课程。...
。
。
INFA技术超群管委会 原创, 版权所有,违者必究。
非常棒的第三方开源组件:Bouncy Castle 加密开源组件API Java Release 1.46.推荐大家使用哈~~~~